外观
03.Windows下的网络编程、TCP与UDP
约 1612 字大约 5 分钟
嵌入式NETLinux单片机
2022-06-14
6、Windows下的网络编程
① socket接口已普遍存在于现代操作系统中
Windows下的socket编程接口与Linux中几乎相同
不同之处
- 返回值类型不同(句柄类型)
- 句柄不是文件描述符,Windows 中并不是一切皆文件
② Windows 下socket()的用法

③ Windows网络编程接口

- close 释放系统资源(Linux)
- closesocket 释放系统资源(windows)
- shutdown 仅仅是关闭网络连接,未释放为了通信而申请的系统资源
④ 几点细微差异
- 通过WSAStartup()初始化系统环境(最先调用)
- socket(), accept()错误返回INVALID_SOCKECT(不可默认为-1)
- bind(), listen()错误返回SOCKET_ERROR(不可默认为-1)
- connect(), send(), recv()错误返回SOCKET_ERROR(不可默认为-1)
- 通过 WSACleanup()清除系统环境(最后调用)
⑤ Windows 网络编程的特殊说明
- 在工程属性中设置链接ws2_32.lib(支持socket编程)
- 定义变量WSADATA wd;
- 选择socket版本并初始化 WSAStartup( MAKEWORD(2,2),&wd );
- Windows 中存在多个socket版本
- MAKEWORD(1,2) // 主版本为1,副版本为2,返回0x0201
- MAKEWORD(2,2) // 主版本为2,副版本为2,返回0x0202
- Windows 中存在多个socket版本
⑥ Windows客户端编程示例

⑦ Windows服务端编程示例

⑧ Windows中的select()函数
Windows 中同样提供select()函数,且参数与Linux的版本完全相同
注意: Windows中的select()函数,第一个参数没有任何意义(仅为了兼容)

⑩ 一个细微差异
Windows 中的select()专门为套接字而设计
- fd_count用于记录感兴趣的socket数量
- fd_array 用于记录感兴趣的socket句柄值

7、TCP与UDP
① TCP / IP分层结构

- 应用层:各个应用程序可以定义(使用)各种各样的协议(可以自定义协议、也可以使用预定义协议)
- 传输层:确保发出的数据能够到达目标主机,完成数据传输(TCP/UDP)
- 网络层:填写数据包地址,选择数据传递路径(IP)
- 数据链路层:融合不同连接方式的链路,屏蔽网络差异
- 物理层:具体连接方式:有线,无线,光纤,。。。
② TCP / IP 工作方式

③ TCP / IP 层次结构的特点
上层依赖邻接下层的能力,下层只为直接邻接上层服务
上层不知道下层的工作机制,下层不管上层传输的数据内容
不做跨层服务,层次结构种的角色缺一不可

④ 深入理解网络层(IP层)
IP寻址:IР地址属于网络层地址,用于标识网络上的目标主机
路由控制:控制数据如何到达目标主机(如:需要经过哪些路由器转发)
无连接:数据包根据IP地址在网络上传递(无需与目标实现建立连接)

⑤ IP地址 和 MAC地址
- IP 地址是动态的,不特定于某个具体的硬件(MAC地址隶属于具体硬件)
- IP地址是网络层使用的地址(用于跨网络投递数据包)
- MAC地址是数据链路层使用的地址(用于确定目标网络中接收数据的主机)
- 路由器中记录了本网络中主机IP地址与MAC地址的映射关系(ARP协议)
⑥ IP 路由控制
为了将数据发给目标主机,所有主机都维护着一张路由表(静态设置或动态维护)
路由表记录了IP数据包下一步应该发给哪个路由器

⑦ IР数据转发
- IР数据包转发用的是“尽力服务”策略
- “尽力服务”指“会努力,但不保证结果”
- 转发时会通过附加信息检查数据合法性,但出现异常不会进行重发
- 以包为单位进行转发,不保证到达(发出之后,石沉网海)
⑧ 问题:TCP/ IP网络层次结构是否能提供可靠数据传输?
⑨ 传输控制协议(Transmission Control Protocol) (TCP 是基于IP)
- TCP在协议实现上提供可靠数据传输
- TCP不存在“数据包”的概念,实现了流式传输(数据如流水,无头无尾)
- TCP内部有服务状态,能够精确知道数据是否已经发送成功,是否被接收,。。。
- TCP在行为上可进行阻塞控制(网络环境变差时,能够调整数据发送速度)
⑩ TCP连接建立

三次交互结束后,连接建立!为什么是3次? 相互发送消息,都获得了回应

⑪ TCP的天生缺陷(DDoS攻击)
- 客服端收到SYN,ACK之后,不再回复最后的ACK消息
- 这将导致服务端消耗资源,但并不会实际进行通信
- 当多个傀儡客户端同时对服务端进行“连接请求”,服务端资源将耗尽

⑫ TCP 连接断开

A: 我准备断了
B: 可以,等我把剩下的数据发完就断
过了一会儿**~
B: OK,发完了,断吧(服务端断开)
A: OK(客户端断开)
四次交互结束后,连接断开!

⑬ UDP的特点:完全继承网络层(IP)工作方式
- 无需连接,直接指定IP地址和端口即可发送数据
- 监听固定端口,只要有数据,统统接收
- 不管网络情况,只要是数据统统可发送
- 不关心数据是否到达对端
⑭ UDP 的使用场合
- 对数据不敏感,需要实时性的场合(如:直播,实时游戏)
- 网络环境比较好的场合(如:物联网家居)
- 需要深度定制协议的场合(如:“不丢包的”UDP协议)
⑮ TCP UDP的区别
- TCP:瓶口对到嘴上了吗?对到嘴上了吗?对到嘴上了吗?好,给你水喝。
- UDP:给你给你都给你,我懒得管你喝不喝得到。

