TCP/IP报文结构

image.png

TCP连接释放

socket API
socket API允许用户创建TCP的端点数据结构,将这些端点与远程服务器的TCP端点进行连接,隐藏了所有底层网络协议的握手细节,以及TCP数据流与IP分组之间的分段和重装细节

image.png



s = socket(<parameters>)        创建一个新的,未命名,未关联的套接字
bind(s, <local IP:port>)        向套接字赋一个本地端口号和接口
connect(s, <remote IP:port>)    创建一条连接本地套接字和远程主机及端口的连接
listen(s, ...)                  标示一个本地套接字,使其可以合法接受连接
s2 = accept(s)                  等待某人建立一条到本地端口的连接
n = read(s, buffer, n)          尝试从套接字向缓冲区读取n个字节
n = write(s, buffer, n)         尝试从套接字向缓冲区写入n个字节
close(s)                        完全关闭TCP连接
shutdown(s,<side>)              只关闭TCP连接的输入或者输出端
getsocket(s, ...)               读取某个内部套接字配置选项的值
setsocket(s, ...)               修改某个内部套接字配置选项的值
time_wait 阶段
tcp连接主动释放端收到对方发送的FIN报文后进time_wait阶段
time_wait阶段为2msl原因
  1. 防止第四次握手客户段发送的ACK报文丢失,服务器无法正常关闭链接
  2. 防止前一个连接上发生延迟或者丢失重传的数据包,被后面的新的连接错误的接收
最长报文段寿命(MSL)
指任何报文在网络上存在的最长时间,超过这个时间报文将会被丢弃。在Linux系统中,MSL被定义成30 秒,2MSL就是60秒。
time_wait过多造成的影响
tcp连接释放第四次握手丢失服务器端端口如何回收
保活计时器---服务器在每次接收到客户端数据时重设 该计数器(通常为2小时),若在设置时间内都 未能接收到客户端数据,服务器这是开始发送探测报文段,以后每隔75秒发送一次,若连续发送10个探测报文段仍无响应 服务器自动关闭链接。 

tcp流量控制

目的控制发送方发送速率不能超出接收方的接收速率。基于滑动窗口实现,接收方发送ACK报文时给出下次传输接收报文段长度(即接收窗口rwnd,单位为字节),发送窗口值不能超出rwnd大小
持续计数器
tcp了连接其中一方A在接收到对方的零窗口ACK报文后即启动持续计数器,防止A在其接收缓存有了新的空间时,发送给发送方新的rwnd值报文丢失时双方相互等待导致僵死局面。若持续计数器到时,A发送零窗口探测报文(携带1字节数据,TCP不对ACK报文段进行确认,TCP只确认那些包含有数据的ACK报文段),对方接收后给出现rwnd值。
持续计数器发送的零窗口探测报文与超时重传的区别是TCP从不放弃发送窗口探查。这些探查每隔60秒发送一次,这个过程将持续到或者窗口被打开,或者应用进程使用的连接被终止。
糊涂窗口综合症
糊涂窗口综合症可发生在tcp连接双方,发送方也可以发送少量的数据或者接收方给出小的窗口值
Nagle算法
当 TCP发送了一个小的报文段 (小于MSS),它必须等到接收了对方的 ACK 之后,才能继续发送另一个小的报文段 。那么在等待的过程中(一个RTT时间),TCP 就能尽量多地将要发送的数据收集在一起,从而减少要发送的 segment 的数量。即任意时刻,发送缓存最多只能有一个未被确认的小段

tcp拥塞控制

拥塞控制的目的在于防止过多的数据注入网络,避免网络中的路由或者链路过载,发送方动态调节发送窗口使其等于拥塞窗口,判断网络拥塞的依据是超时
拥塞控制算法
  1. 慢开始:发送方设置初始拥塞窗口值为2至4个最大报文段(MSS,通常为1460字节)长度值,每收到一个对新报文段确认则将发送方拥塞窗口值加1,拥塞窗口增长呈指数增长
  2. 拥塞避免:拥塞窗口超出慢开始门限进入拥塞避免阶段,每经过一个传输轮次(传输轮次指发送方把当前拥塞窗口允许发送的报文段全部发送出去并且收到了最后最后一个字节的确认)其拥塞窗口值加1,拥塞窗口增长呈线性增长
  3. 快重传:快重传对于失序到达报文段,接收方应立即发送对已到达报文段的重复确认,通常为3个重复确认,而非捎带确认,目的在于避免发送方误认为网络出现拥塞
  4. 快恢复:快重传使发送方知道网络只是存在个别报文段丢失,不启动慢开始算法,而开始执行拥塞避免算法

image.png

tcp拥塞窗口cwnd在拥塞控制时变化图示

image.png

TCP和UDP的区别,DNS基于哪一种
tcp报文结构

粥于于
9 声望1 粉丝

代码搬运工


« 上一篇
Redis基础
下一篇 »
排序算法总结