当前位置:   article > 正文

HCIP的学习(2)

HCIP的学习(2)

TCP----传输控制协议

是一种面向连接的可靠传输协议
注:与我之前博客HCIA的学习(2)结合一起看

面向连接:数据传输前收发双方建立一条逻辑通路

特点:

  • TCP是一种面向连接的传输协议
  • 每一条TCP连接有且只能存在两个端点,形成一种端到端的连接形式。
  • 可靠、有序、无丢失和无重复
  • TCP是提供全双工通讯。
    • 发送缓存
      • 想要发送的应用层数据
      • 已经发送但未收到确认的数据
    • 接收缓存
      • 按需到达但还未被应用程序提取的数据
      • 乱序到达的数据
  • TCP是面向字节流的。
源IP、源端口、目IP、目端口----->TCP会话的四元组信息。

套接字:IP:Port
  • 1
  • 2
  • 3
TCP报文段

在这里插入图片描述

在这里插入图片描述

确认序列号表明是接收方期望收到发送方发送的下一个字节的序号;且表示之前的所有数据均已接收。–>累积确认

ACK确认位:当ACK=1时,确认序列号有意义。在连接建立后所有传输的报文段都必须将该标记位置为1。
SYN同步位:代表连接请求。
FIN终止位:表明此报文段发送方数据已发送完毕,要求释放连接。

RST复位:当TCP连接出现严重错误时,必须释放连接,然后重新建立传输连接。
URG紧急位:当URG=1时,表明此报文段中存在紧急数据,是高优先级数据,应尽快传输给应用层程序处理,不再缓存在排队。配合紧急指针使用。
PSH推送位:当PSH=1时,接收方应尽快交付数据给应用层程序,不再等待缓存填满再向上交付。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

TCP的可靠性

排序机制
MTU---最大传输单元(数据帧,二层,协商在数据链路层)
MSS---最大段长度----TCP分段--->该参数是需要在TCP建立握手过程中通过前两次SYN报文段来进行协商确定。(可选项字段。)
  • 1
  • 2

如果在本地进行了分段操作,则不需要进行分片操作

确认机制和重传机制
RTT---往返时间
RTO---超时重传时间;略大于RTT时间--->动态变化的数值。加倍的形式进行变化(可能服务器资源紧缺,避免资源加剧)。
  • 1
  • 2

超时重传—快速重传

在快速重传机制中,并不是因为RTO时间到达从而触发重传机制,该重传机制是根据对端的反馈信息进行重传,当连续3次收到相同的ACK报文时,发送端会重传数据。这3个连续的ACK报文被称为冗余ACK

累积确认----选择确认

确认报文在TCP可选项里携带未接收到的数据信息(例:1000-1999缺失)

选择确认机制也是需要进行协商的。不协商默认累计确认,现在大部分电脑携带选择确认机制。

流控—流量控制机制
窗口:指定的是无需等待确认应答,而可以继续发送数据包的最大值。
  • 1

窗口大小体现在缓存区的大小

TCP要求发送方依据接收窗口rwnd来控制数据的发送量。rwnd等于接收方接收缓存大小减去已存数据量大小。即rwnd变量是可变的。

在这里插入图片描述

TCP面向连接
TCP连接的建立
TCP连接建立需要解决的问题:
1、要使双方均知晓对方的套接字信息。
2、允许双方进行参数协商(MSS、窗口值、是否使用选择确认机制)
3、给各设备进行资源分配
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

CLOSED:关闭状态

LISTEN:监听状态

SYN-SENT:同步已发送状态

SYN-RCVD:同步已接收状态

ESTABLISHED:连接已建立状态

  1. 服务器先分配接收缓存空间(服务器状态:CLOSED---->LISTEN)
  2. 客户端建立接收缓存空间,然后发送请求建立连接,同时将接收缓存空间大小发送出去(客户端状态:CLOSED—>SYN-SENT)
  3. 接收到报文,建立发送缓存空间
  4. 服务器发送确认报文并请求建立连接(携带接收缓存空间大小)(全双工通讯)(服务器状态:LISTEN—>SYN-RCVD)
  5. 客户端接受到报文,同时建立发送缓存空间(客户端状态:SYN-SENT—>ESTABLISHED)
  6. 客户端发送确认报文,并且可以携带数据,服务器接受到(服务器状态:SYN-RCVD—>ESTABLISHED)

序列号:seq=x,y

x,y:随机生成

  • 42亿序列号可能用完(序列号=初始+数据大小(以字节为单位:1T>>42亿字节))
  • 为了安全,如果一个固定序列号,那任意机器获取其中一个数据,得到数据大小,然后用固定序列号+数据大小伪造信息,如断开连接等等
  • 循环使用:用四元组信息加一个随机因子进行md5计算得出随机值

数据错乱(序号回绕):例如客户端发送序列号为A的报文并进行超时重传,但A报文并未丢失,直到客户端发送一轮循环(A–>Z–>A),要发新一轮A时,之前的A报文抢先新A报文发送到服务器,会导致正常报文(新A)被服务器丢弃,接收伪(错误)报文(旧A),严重会导致计算机宕机

解决方法:在TCP首部里的选项里加一个时间戳(例:服务器发送报文里携带上一个客户端报文发送的时间和这个报文发送的时间,客户端接收报文时会查看报文里携带的上一个客户端报文发送的时间,如果与客户端现在的时间相差过大就会认为此报文为无效报文丢弃)

RTT就是根据时间戳算出来的,(动态变化)网络波动小,RTT小

**TCP的保活计时器:**2h(当第三次握手报文发出后,客户端挂了,服务器的保持连接时间,如果在时间内客户端回复,即继续用这个连接,如果2h服务器未收到客户端的信息,服务器则发送10次探测报文,如果客户端回复,则保持连接,未收到回复则断开连接)

同步申请建立连接:
在这里插入图片描述

TCP连接释放
1、对双方各自资源的释放过程
2、任何一方都可以在数据传输结束后发送连接释放通知
  • 1
  • 2

在这里插入图片描述

ESTABLISHED:连接已建立状态

FIN-WAIT-1:终止等待1状态

CLOSE-WAIT:关闭等待状态

FIN-WAIT-2:终止等待2状态

LAST-ACK:最后确认状态

TIME-WWAIT:时间等待状态

CLOSED:关闭状态

MSL:最大报文段寿命,即一个报文段在网络中能传输的最大时间(2min)

  1. 客户端发送FIN和ACK报文(客户端状态:ESTABLISHED—>FIN-WAIT-1)
  2. 服务器接收到并发送ACK报文(服务器状态:ESTABLISHED—>CLOSE-WAIT)此时进入半关闭状态,时间较长,因为中间服务器还有数据要传输
  3. 客户端接收到ACK报文(客户端状态:FIN-WAIT-1—>FIN-WAIT-2)
  4. 服务器发送FIN和ACK报文(服务器状态:CLOSE-WAIT—>LAST-ACK)
  5. 客户端接收到FIN和ACK报文并发送ACK报文(客户端状态:FIN-WAIT-2—>TIME-WWAIT)
  6. 服务器接收到ACK报文(服务器状态:LAST-ACK—>CLOSED)
  7. 客户端进入TIME-WWAIT状态,需等待2MSL后,中间客户端未接收到任何服务器发送的报文,即进入CLOSED状态

多次u+1:TCP过程中若不携带数据,相当于一个报文

**TCP延迟确认机制:**当服务器与客户端同时没有数据发送时,让服务器发送的第一个报文等待服务器将发送缓存释放的时间,与第二个报文一起发送(机制开启才可以同时释放,也是数据报文和确认报文合并的原因)

同步申请释放连接:
在这里插入图片描述

CLOSING:同时关闭状态

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/293810
推荐阅读
相关标签
  

闽ICP备14008679号