TCP三次握手,TCP/IP数据包大小

名词解释

SYN:同步序列编号(Synchronize Sequence Numbers)是TCP连接的第一个包,在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应

ACK: (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

SEQ是数据包序号
SEQ是数据包本身的序列号;ACK是期望对方继续发送的那个数据包的序列号。

1、三次握手

TCP是一个连接协议,就像打电话一样,需要拨号,打通了之后才能传信息。
首先,客户端向服务端发起了一个报文,SYN=1,ACK=0,SEQ=x(x是一个初始数据包序号)。

SYN=1, ACK=0, SEQ=200

然后,服务端收到连接请求报文,向 服务端 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时 也选择一个初始的序号 y。 如
SYN=1, ACK=201,SEQ=4800
(接收端的确认信息,且接收端的初始数据包。序号为4800。)

最后,客户端要确认收到了服务端的确认信号,向服务器发送确认包ACK(ack=k+1)
确认号为 y+1,序号为 x+1
SYN=1, ACK=4801,SEQ=201

重复过程
TCP三次握手,TCP/IP数据包大小_第1张图片
总之就是不断用ack去返回对方seq的确认信息,打个比方就是两个人打电话,不断地回复(你刚才说的是第 seq 句)

四次握手

TCP三次握手,TCP/IP数据包大小_第2张图片
终止连接的时候因为服务端可能要等待读写完成,需要暂时进入close-wait状态(至于正常连接中应该是因为有滑动窗口缓存,所以不用等)。 所以需要多一次挥手。
所以被称为四次挥手。

滑动窗口

TCP三次握手,TCP/IP数据包大小_第3张图片
接收方接收数据一般是有缓存的,而不是接一个处理完了再让发送方再发下一个,只有在滑动窗口里的数据才能发送。滑动窗口本质上是描述接受方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。如果发送方收到接受方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接受方发送窗口大小不为0的数据报的到来。

窗口合拢:当窗口从左边向右边靠近的时候,这种现象发生在数据被发送和确认的时候。
窗口张开:当窗口的右边沿向右边移动的时候,这种现象发生在接受端处理了数据以后。
窗口收缩:当窗口的右边沿向左边移动的时候,这种现象不常发生。
TCP就是用这个窗口,慢慢的从数据的左边移动到右边,把处于窗口范围内的数据发送出去(但不用发送所有,只是处于窗口内的数据可以发送。)

一个数据包能放多少数据

首先要弄清楚TCP/IP协议中,TCP是传输控制协议,IP是网络层协议。

TCP协议并没有规定一个数据包最多能放多少数据。由于我们通常使用的是tcp/ip协议,所以我们的数据包都是ip数据包。

IP数据包的最大长度是64K字节(65535),因为在IP包头中用2个字节描述报文长度,2个字节所能表达的最大数字就是65535。 由于IP协议提供为上层协议分割和重组报文的功能,因此传输层协议的数据包长度原则上来说没有限制。实际上限制还是有的,因为IP包的标识字段终究不可能无限长,按照IPv4,好像上限应该是4G(64K*64K)。依靠这种机制,TCP包头中就没有“包长度”字段,而完全依靠IP层去处理分帧。这就是为什么TCP常常被称作一种“流协议”的原因,开发者在使用TCP服务的时候,不必去关心数据包的大小,只需讲SOCKET看作一条数据流的入口,往里面放数据就是了,TCP协议本身会进行拥塞/流量控制。

但是到了更下一层的传输,连ip包都显得太大了,这里我们可以用 netstat -in 命令查看系统的最大传输单元(Maximum Transmission Unit,MTU)
对于来自于上一层的IP协议,当要求发送的IP数据报比数据链路层的MTU大时,必把该数据报分割成多个IP数据报才能发送。

netstat -in
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500 79784071      0      0 0      82379685      0      0      0 BMRU
lo       65536  9587789      0      0 0       9587789      0      0      0 LRU

在Ethernet中,MTU为1500字节;在FDDI中,MTU为4352字节;在 IP over AMT中,MTU为9180字节

大部分网络设备的MTU都是1500。如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。

而在更底层的地方,可能数据包被拆的更小,如果是IP over ATM,则IP包将被切分成一个一个的ATM Cell,大小为53字节。我们的宽带ADSL技术就使用了ATM协议。

如有理解不到位,欢迎指正。

你可能感兴趣的:(TCP三次握手,TCP/IP数据包大小)