美文网首页
简单逻辑整理之TCP/IP(3)- tcp

简单逻辑整理之TCP/IP(3)- tcp

作者: traxes | 来源:发表于2017-11-01 00:05 被阅读15次

tcp提供一种可靠的,面向连接的字节流服务。tcp传递给ip的信息单位称报文段。TCP将用户数据报打包构成报文段;它发送数据后打开一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据;tcp提供端到端的流量控制,并计算和验证一个强制性的校验和。

1.tcp报文头 20字节

  • 16位源端口号

  • 16位目的端口号
    两个端口号加上ip的两个ip地址确定唯一的tcp连接。也做校验和使用,检测传输过程中是否出现差错。

  • 32位序号 :0 到2的32次方 - 1,用于标识tcp发端向tcp收端的字节流。

  • 32位确认序号:当ack为1时生效,值为上次成功接收字节的序号加一

  • 4位首部长度

  • 6位保留

  • URG:紧急指针有效

  • ACK:这个标志位为1时,确认序号生效。连接被建立这个字段总为1

  • PSH:通知接收方应该尽快把这个报文交给应用层

  • RST:重建连接 ,可以用来释放连接。称异常释放。

  • SYN:同步序号用来发起一个连接。新建连接是为1,序号位为初始序号ISN(INITIAL EQUENCE NUBER),ISN随时间而变化,可看做一个32比特的计算器,每4ms加一。每个交互报文都会占一个序号。而这里使用ISN。发送的第一个字节序号为ISN + 1

  • FIN:发端完成发送任务
    ps:标志位均占一位

  • 16位窗口大小

  • 16位紧急指针

其他说明

跟udp一样包含一个有一个伪首部包含源端跟目的端的IP地址,被校验和覆盖

可选字段可以用于扩充窗口大小或这点MSS(max segment size)最长报文大小

2.建立连接

三次握手,建立双向通道。建立连接的最长时间限制为75秒。ex:500ms定时器,第一次6秒,第二次24秒,直到75秒超时。

建立连接过程中设定的那些值:
1.如果使用滑动窗口会设定滑动窗口的大小;
2.设定mss的大小,默认为536.以太网可达1640

3.断开连接

四次握手;存在一种半关闭的状态。由于是双向通道,当一个通道发送FIN告诉对端传输结束,进入半关闭状态,此时对端还能传输数据。一端发送FIN主动关闭,另一端回复ACK。当另一端也完成传输后发送FIN执行被动关闭。双方确认传输结束后断开连接。

半关闭是一种状态,代表自己已经完成传输工作了,但你还是可以给我发送数据的。

4.状态分析

close(不存在这种状态,为了方便描述)这里暂且设置为初始状态。
主动打开状态变迁过程:
client:syn-sent service:syn_rcvd
service收到ack后变为 established 工作状态
进入established状态可以双向传输了
知道一方传输结束,主动发出fin, 然后进入fin_wait_1,接受到回应后进入fin_wait2状态,接收到对端FIN信后回应ACK后进入2msl状态 (主动关闭才会出现该状态)

处于2msl状态时会占用端口。异常情况下,重启服务器,此时使用2msl状态的端口建立连接,会出现把异常之前发生的报文的应答当做新连接的报文。为了避免这种情况,重启后MSL时间(平静时间)内部不允许建立连接。但一般主机重启都超过MSL时间。

5.服务器的设计

存在两个队列,请求队列和处理队列。
请求队列用于缓存当前请求,该队列存在一个积压值,如果超过积压值则拒绝连接。应用层队列会根据执行情况把任务从请求队列中取出并处理。

队列已满的情况下,tcp不会接收SYN也不发回RST做为应答,这是一个软错误。

6.negal算法

这个算法目的是为了提高带宽的利用率。因为存在发送很多小报文的情况,negal通过延长合适时间(一般采用200ms),让发送端有时间缓存更长的数据,一次性发送。如果实时性要求高的场景,可以通过TCP_NODELAY来关闭。

7.滑动窗口、拥塞窗口

发送接收双方都拥有一个数据缓存区,会缓存发送或接收的数据,而接收方根据自身缓存区的情况来控制连接的滑动窗口win(窗口更新),通知发送端。发送端可以根据网络情况调整拥塞窗口的值cwnd,在堵塞的情况下会采用慢启动算法,这个算法会把cwnd设置为1(实质上这个是以字节为单位),并在达到启动阀值之前指数增长。

8.慢启动算法

cwnd = 1,在达到启动阀值前指数增长。

9.拥塞避免算法

慢启动达到阀值后执行拥塞避免算法,cwnd的值平缓增加。

10.快速重发和快速恢复算法

当发送端收到3个重复的ack时判断为报文丢失,并认为网络堵塞,但是既然能收到3个ack,就代表数据还能被接收,此时执行快速重传。慢启动阀值ssthresh设置为当前窗口的二分之一(max(min(win,cwnd),2);并重传数据,接收到ack后,提高cwnd的值,如果cwnd比ssthresh小指数增加,如果超过执行拥塞避免。

出现超时的情况采用快速恢复算法,使用慢启动,后面增加的方式跟快速重传算法一样。

11.糊涂窗口

1.接收端不通告小窗口。不通告一个比当前窗口大的窗口,除非能增加一个报文段的大小,或者能增加接受方缓存空间的一半,不论多少。调整缓存空间可以突破界限,但前提是能增加一半或以上。
2.发送方满足条件:1发送满长度的报文。2可以发送至少是通过窗口大小一半的报文段。3能够发送当前数据并不希望接收ACK,相当于没有未确认的数据,或者禁用nagle算法。

12.每一个连接的4个定时器

1.重传定时器适用于当希望收到另一端的确认,作重传计时。
2.坚定定时器使窗口大小信息保持不
断流动,即使另一端关闭了其接收窗口。
3.保活定时器可检测到一个空闲连接的另一端何时崩溃或重启。
4.2MSL定时器测量一个连接处于TIME_WAIT状态的时间。

相关文章

  • 简单逻辑整理之TCP/IP(3)- tcp

    tcp提供一种可靠的,面向连接的字节流服务。tcp传递给ip的信息单位称报文段。TCP将用户数据报打包构成报文段;...

  • 简单逻辑整理之TCP/IP(2)- udp

    UDP首部2 0字节,IP首部20字节 16位源端口号16位目的端口号16位UDP长度16位UDP校验和特重说明下...

  • 网络通信 Http、Https、TCP、UDP、IP

    目录 1.TCP/IP、TCP、UDP2.IP3.Http、Https 1.TCP/IP、TCP、UDP 1.什么...

  • 关于网络基础知识TCP/IP(三)

    四、掌握TCP/IP协议:TCP/IP3次握手 4.1 IP协议是TCP/IP协议中最重要的协议,它为TCP UD...

  • 温故而知新--Soket(自用)

    自己整理,方便平时常看。不喜勿喷 TCP/IP 从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP...

  • TCP/IP协议

    TCP/IP协议三次握手与四次握手流程解析 HTTP协议—— 简单认识TCP/IP协议 TCP/IP协议入门(一)...

  • 网络与TCP/IP

    HTTP协议的底层是由TCP协议和IP协议(简称TCP/IP)构建的简单来说,IP是控制如何连接的,TCP是控制如...

  • TCP/IP 协议(转)

    参考:TCP/IP 协议tcp窗口滑动以及拥塞控制解析TCP之滑动窗口(动画演示)

  • C1 了解Web及网络基础

    KeyWords: 诞生,网络基础TCP/IP,TCP/IP协议族,TCP/IP的分层管理,TCP/IP通信传输流...

  • 计算机网络

    一、tcp/http 1、TCP首部。 IP数据报(IP首部+TCP报文段(TCP首部+TCP数据)) TCP首部...

网友评论

      本文标题:简单逻辑整理之TCP/IP(3)- tcp

      本文链接:https://www.haomeiwen.com/subject/zlvxpxtx.html