tcp/ip协议详解

1.1 数据链路层
数据链路层实现了网卡接口的网络程序,以处理数据在物理媒介上的传输;ARP和RARP协议实现IP地址和机器物理地址(MAC地址)之间转换
1.2 网络层
网络层实现数据包的选路和转发;IP协议:根据数据包目标IP地址来决定如何投递它。ICMP协议:用于检测网络连接,ICMP报文分为两大类:一类是差错报文,用来回应网络差错,比如目标不可达和重定向;另一类是查询报文,用来查询网络信息,比如ping程序是用ICMP报文检查目标是否可到达
1.3 传输层

TCP协议:可靠的(超时重传、数据确认)、面向连接的、基于流
UDP协议:不可靠、无连接、基于数据报
2.1 封装


2.2 分用

在网络编程中重点介绍下靠近应用层的TCP协议
TCP特点:可靠的(超时重传、数据确认)、面向连接的、基于流
通信双方必须先建立起连接,才能开始数据的读写,双方必须为该连接分配必要的内核资源,以管理连接的状态和数据传输,断开连接以释放系统资源;由于连接是一对一的,所以不存在广播和多播;字节流和数据报的区别体现在应用层为双方是否执行相同的读写次数;当发送端执行多次写操作时,TCP模块先将数据拷贝到内核发送缓冲区中,在开始发生数据时,将这些数据封装成一个或多个TCP报文段发出,写操作次数和报文段个数没有关系,同理读数据时,读取的次数和TCP模块接受的报文段个数没有关系;总结,发送端写操作次数和接收端读操作次数没有关系,这就是字节流;UDP数据报则必须相等,否则会丢包

TCP头部结构

16位端口号:告知报文段从哪里传输到哪里,一般客户端端口号为随机生成,服务端端口号指定端口号
32位序号:一次TCP通信过程中某一个传输方向上的字节流的每一个字节序号。序号值被系统初始化为某个随机值ISN,后续的报文段序号值为ISN加上该报文段传输的第一个字节在整个字节流中的偏移
32位确认号:用作对另一方发送来的报文段的响应
4位头部长度:表示有多少个4字节,TCP报文段头部最大长度为60字节
URG:表示紧急指针是否有效
ACK:表示确认号是否有效,该报文段为确认报文段
PSH:表示提醒接收端应用程序应立即从TCP接收缓冲区中读取数据
RST:表示要求对方重新建立连接,该报文段为复位报文段
SYN:表示请求建立连接,该报文段为同步报文段
FIN:表示通知对方要关闭连接了,该报文段为结束报文段
16位窗口大小:是TCP控制流量的手段,指接收通告窗口
16位校验和:发送端填充,是TCP进行可靠传输的校验手段
16位紧急指针:紧急指针相对于当前序号的偏移,称为紧急偏移
选项字段:有一个MSS(TCP最大报文段长度),通常设置为MTU-40(TCP头部长度20字节,IP头部长度20字节)
TCP连接和断开时客户端和服务器状态转移

TIME_WAIT状态详解
客户端要等待一段长为2MSL(报文段最大生存时间)时间才能完全关闭
1.保证可靠终止TCP接连状态。假设用来确认报文段6发送的报文段7丢失,服务器要重发报文段6,客户端要停留在某个状态来接收服务器报文段6的重发
2.当一个TCP连接处于TIME_WAIT状态时,无法立即使用该端口来进行新的连接,如果可以建立新的连接可能会收到原来的TCP连接的报文段(等2MSL时间过去后便可安全的建立新的连接,因为迟来的报文段会被抛弃)

浙公网安备 33010602011771号