您的当前位置:首页正文

对于TCP/IP协议的一些总结

2024-12-12 来源:个人技术集锦

曾经对TCP/IP报文的一些疑惑

1. Appl首部

就是指应用层协议的头部(应用层是http协议,指的就是http头部),它应该不需要多说了吧

2. 以太网首部和尾部

  1. 首部:共14字节 = 6个字节目的地址(目的设备mac地址) + 6个字节源地址(目的设备mac地址) + 2个字节类型(后面所跟数据包的类型,0x0800代表是IP协议帧)
  2. 尾部:4个字节,用于校验帧的完整性

3. MTU是否包含以太网头部和尾部

不包含

曾经对三次握手的一些疑惑

1. 三次握手只有TCP协议参与?

每次提到三次握手都只是在说TCP协议,慢慢的让我陷入一个误区:三次握手只有TCP协议参与。但后来慢慢接触后才了解,之所以每次提三次握手都只提TCP协议,只不过是因为在三次握手过程中是通过TCP协议的SYN/ACK等字段来判定建立连接的情况,所以会比较关注,其他协议在三次过程中并没有什么特别之处,便没有提及。

2. 在三次握手期间是否传递数据

带有SYN标志的过程是不可以携带数据的,也就是说三次握手的前两次是不可以携带数据的(逻辑上看,连接还没建立,携带数据好像也有点说不过去),但建立连接的第三次握手允许携带数据。

3. TCP协议的seq numbner和ack number赋值逻辑

这两个字段在三次握手过程和数据传输过程赋值逻辑是不一致的。

  1. 三次握手过程
    在建立连接时,发送端会生成随机的seq number发送给接收端,并且接收端通过将seq number+1赋值给为ack向发送端作响应,代表已经收到发送端的信息。
2. 数据传输过程
   数据传输过程用到的初始seq其实就是三次握手结束后的seq,并没有重新生成。接收端对发送端的响应ack不再是seq number+1,而是seq number+数据长度,代表着接收端下次想要数据的起始序号,起始序号仅仅代表着开始,所以接收端还会响应一个window字段,来表示我目前可以接收多的数据,起始序号加上+window,发送端便可以得到此时接收端想要的完整数据。

最后形成的帧在网络中是如何传递的

1. 内网之间的帧传递

  1. A给B发送消息,IP协议中的IP地址是内网IP,其次通过ARP协议得知两台设备的MAC地址并补充到帧的以太网首部。从而实现两台设备的通信

2. 非内网设备之间的帧传递

  1. A给B发送消息,首先会将帧传递给内网网关C,此时IP协议的源IP地址还都是内网IP,但当继续转发到外网网关C时,源IP地址就会变成A的外网IP,之后的传输中该帧中的源IP地址将一直保持A的外网IP
  2. 在路由转发过程中,源MAC地址和目标MAC地址是不断变化的。举个栗子,路由中间经过路由M->路由N,该帧的源MAC地址就是路由M的MAC地址,目标MAC地址就是路由N的MAC地址

3. 疑问

参考链接

显示全文