TCP/IP的一些需要理解的点(一)

1、TCP协议位于网络通信的传输层,与它同在传输层的是UDP协议,TCP是有连接的,UDP是无连接的。传输层其上的应用层协议要么基于TCP要么基于UDP,或二者都有(DNS)。

2、因为网络对包的大小是有限制的,其最大值称为MTU(最大传输单元),大多数网络的MTU为1500字节,有的网络启用了巨帧,能达到9000字节,假如发送方和接收方处于不同大小的网络,TCP在建立连接(三次握手)时,双方都会把自己的MSS(Maximum Segment Size) 告诉对方,MSS加上TCP头长度(20Byte)和IP头的长度(20Byte)就得到MTU了,TCP选择发送方和接收方中MTU小的值作为通信时的MTU,若一个包的大小超过MTU,TCP层会把包分成几个包来传输。而TCP头中的window size是用于拥塞控制,用于接收方告知发送方自己的接收窗口(即接收缓冲区)大小。

3、通信双方在用TCP协议进行网络通信时,需要先进行3次“握手”(具体过程课百度),这些建立连接的包的TCP头中用“SYN”标记。建立连接后,双方可互相发送数据包,发送方和接收方各自维护一个Seq值,举个例子发送方发送的一个包是Seq=2532,Len=1238,下一次发的包的Seq就是2532+1238=3770。再来看看接收方,接收方有可能收到2个包是:Seq:3770,Len=1320;Seq=885,Len=1647,那么会发给发送方一个包是:Seq:9952,Len:0,Ack:2532。这里可以看到维护Seq的好处:(1)有序性:包到的时间是无序的,TCP根据Seq可以把包重新排序。(2)可靠性:比如例子中,接收方根据接受到的两个包计算(885+1647)!=3770,所以可以判断网络丢失了(Seq=2532,Len=1238)这个包,于是它发回给接收方一个包,带有Ack=2532,提醒它重传这个包。

 

posted @ 2020-04-25 23:46  HankTown  阅读(176)  评论(0编辑  收藏  举报