【计网】TCP

1、TCP协议的特点和报文格式

     1.1 特点

          TCP是面向链接(虚连接不是真实的物理线路)的传输层协议。每一条TCP链接都是点对点的全双工通信。TCP提供可靠交         付的服务,可靠有序、不丢不重。

          发送缓存:已发送但未接收到确认的报文&待发送的报文

          接收缓存:按序到达但未被上层读取的数据&未按序到达的数据

          TCP将上层的数据看作是连续的一串字节数据流。

          TCP协议将多个字节包装为一个数据包,并添加TCP首部发送出去。

     1.2 报文格式

          TCP报文包括数据部分和首部字段两部分。数据部分就是上层数据的多个字节。

          首部字段格式如下:

          

          网路层通过IP找到主机,那怎么找到是这台主机的哪个进程需要这个TCP数据包呢,就是通过端口来区分。因此首部包含了源端口和目的端口。TCP为每一个数据字节都编了号,首部序号是当前报文中第一个字节的序号。确认号x表示当前需要对方发送的下一个数据包的序号是x,也表示x之前的数据包都收到了。窗口字段表示流量控制使用的字段,表示要求对方将窗口调整为该字段大小,控制发送方发送速率,实现流量控制,窗口=min{接收窗口,拥塞窗口}。校验和是对报文数据部分的正确性校验,从而提供一个保证可靠的手段。

          ACK位是指首部中的确认号是否有效;SYN位是标识当前是请求链接建立或者应答请求建立链接的数据报文;FIN是标识当前是请求拆除链接的报文。

2、TCP链接管理

     链接管理主要是建立链接和拆除链接的机制。

     三次握手(建立链接)

     

     1)客户端请求建立链接:SYN=1,ACK=0,seq=x,ack=无效;此时无需确认因此ACK等于0,ack无效,请求链接SYN=1,seq是发送方随机的序号初始码

     2)服务器发送应答:SYN=1,ACK=1,seq=y,ack=x+1;此时需要确认,因此ACK=1,ack=已接受序号+1

     3)第三次握手:SYN=0,ACK=1,seq=x+1,ack=y+1;

     为什么是三次握手,不是两次或者四次?首先四次没必要,三次已经满足要求,继续增加徒增时延。不是两次是因为,如果没有第三次握手,服务端发出确认就开始监听客户端数据,对服务端可能造成资源浪费,因为连接建立请求可能是在网络中滞留很久的数据包,已经无效了,再为其监听等待客户端数据无意义。

     四次挥手(拆除链接)

     

     1)TCP链接全双工通信,一方请求拆除链接只是拆除单方向的链接,另一方向的链路还可以继续发送数据。

     2)为什么要有等待2MSL的过程?因为服务端发送了FIN后,客户端为其发送应答,如果此应答丢包了,那么服务端一直处于半关闭状态,等待2MSL,期间服务端可能重发FIN,那么客户端可以接收到并发送响应。MSL是单向数据包传输最大时间,因此2MSL刚好是发送出去应答(最大MSL),对方没收到再此发送FIN(最大MSL)的时间和。这里有个疑问,如果2MSL期间,服务器端重发的FIN丢失了,直到2MSL结束客户端都没有再收到,但是服务端也没有收到响应一直重发FIN?此时客户端会直接关闭吗,那么这样服务器端岂不是存在半关闭状态的链接?

3、可靠传输

     保证可靠传输的机制是:校验、序号、确认、重传(包括快重传)

     校验就如上首部字段介绍的。序号是为上层数据的每个字节标一个序号,数据包的序号是包范围字节的首字节序号。确认是首部字段ACK和ack,ack的值x表示x之前的都收到了,就算是乱序收到了后面的,也会应答第一个没收到的序号。发送方在超过收到确认的时间后会重传,而如果连续收到三个冗余的确认,则不等时间到立即快速重传。

4、流量控制

     流量控制与拥塞控制都是控制发送方的发送速率,但是其目的是不同的。流量控制关注的局部,是点对点的双方通信过程中,接收方接收速率跟不上发送方的发送速率,因此需要通过控制发送方速度。拥塞控制关注的是全局,是整个网络已经达到瓶颈,必须减少各个发送方的发送速度,从而避免网络阻塞。

     流量控制的手段就是通过在接收方发送应答的中携带接收窗口值,来实现对发送方窗口的控制。

     当然发送方窗口还受到拥塞窗口的影响,发送窗口=min{接收窗口,拥塞窗口}

5、拥塞控制

     拥塞控制是避免整个网络拥塞,需要控制发送到网络的所有发送方的速度。拥塞控制不像流量控制那样是点对点的,因此无法实现一方直接发送窗口大小约束来实现控制,只能通过控制算法由发送方主动实现窗口大小的调整。分别是慢开始、拥塞避免算法和快重传、快恢复算法。

     1)慢开始、拥塞避免

     一开始拥塞窗口大小是1,然后呈指数增长,每次*2,直到到达拥塞避免阈值(初始16),开始以拥塞避免的加法增加(每次加1),直到出现网路拥塞,然后掉回慢开始初始窗口1,并调整拥塞避免阈值为出现网络拥塞是窗口大小的一半。重复慢开始过程。。。。。。

     2)快重传、快恢复

     不同于慢开始拥塞避免,快重传、快恢复算法中一旦遇到网络拥塞,不是掉回1,而是调回新的拥塞避免阈值,新的阈值为拥塞出现时窗口的一半大小。然后继续加法增大。这个过程避免了掉回1再经过慢开始的过程,使得发送方遇到网络阻塞时快速恢复发送速度,而不是从1开始慢慢恢复。适合突发网路阻塞,整体网络状态比较好的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值