传输层协议 TCP

TCP(Transport Control Protocol)是一个传输层协议,提供 Host-To-Host 数据的可靠传输,支持全双工,是一个连接导向的协议。

TCP 提供的是 Host-To-Host 传输,一台主机通过 TCP 发送数据给另一台主机。

 

TCP 协议往上是应用到应用(Application-To-Application)的协议。什么是应用到应用的协议呢?比如你用微信发信息给张三,你的微信客户端、微信聊天服务都是应用。微信有自己的聊天协议,微信的聊天协议是应用到应用的协议;如果微信的聊天协议想要工作,就需要一个主机到主机的协议帮助它实现通信。

而 TCP 上层有太多的应用,不仅仅有微信,还有原神、抖音、网易云音乐……因此 TCP 上层的应用层协议使用 TCP 能力的时候,需要告知 TCP 是哪个应用——这就是端口号。端口号用于区分应用。

TCP 要实现主机到主机通信,就需要知道主机们的网络地址(IP 地址),但是 TCP 不负责实际地址到地址(Address-To-Address)的传输,因此 TCP 协议把 IP 地址给底层的互联网层处理。

互联网层,也叫网络层(Network Layer),提供地址到地址的通信,IP 协议就在这一层工作。互联网层解决地址到地址的通信,但是不负责信号在具体两个设备间传递。因此,网络层会调用下方的链路层在两个相邻设备间传递信息。当信号在两个设备间传递的时候,科学家又设计出了物理层封装最底层的物理设备、传输介质等,由最下方的物理层提供最底层的传输能力。

 

TCP 协议有这样几个基本操作:

如果一个 Host 主动向另一个 Host 发起连接,称为 SYN(Synchronization),请求同步;

如果一个 Host 主动断开请求,称为 FIN(Finish),请求完成;

如果一个 Host 给另一个 Host 发送数据,称为 PSH(Push),数据推送。

以上 3 种情况,接收方收到数据后,都需要给发送方一个 ACK(Acknowledgement)响应。请求/响应的模型是可靠性的要求,如果一个请求没有响应,发送方可能会认为自己需要重发这个请求。

 

建立连接的过程(三次握手)

断开连接的过程(4 次挥手)

 

 

 这里说下24,25,26为啥都减54

54=以太网协议头(14字节)+IP头(20字节)+TCP头(20字节)

ack是它收到的数据包的seq加上数据包的大小(不包括:以太网协议头=14字节,IP头=20字节,TCP头=20字节)

 

3中seq为95000,是因为在2和3之间,可能还会有很多B->A的传递,ack均为80001

4中然后A回应一个ACK,表示我知道了,一起关吧。B收到这个ACK后,就会CLOSE。

但是实际上A不会直接CLOSE,还会进入一个等待时间状态TIME_WAIT,持续2倍的MSL(Maximum Segment Lifetime,报文段在网络上能存活的最大时间)

说下为什么会有这个TIME_WAIT

1. 假设4这发送的最后一次ACK丢包了,没有被B收到,没有这个TIME_WAIT,直接CLOSE.

B会一直给你A发FIN包,就上述3。但是A以及CLOSE,但是这个包不会被A回应,因此B最终会收到RST,误以为是连接错误。重新建立连接

2.如果A直接close了,然后向B发起了一个新的TCP连接,可能两个连接的端口号相同。

一般不会有什么问题,但是如果旧的连接有一些数据堵塞了,没有达到B呢,新的握手连接就已经到B了,

那么这时候,由于区分不同TCP连接是依据套接字,因此B会将这批迟到的数据认为是新的连接的数据,导致数据混乱

 

总结:
确认号:
在握手和结束时确认号应该是对方序列号加1
ack=对方seq+1
传输数据时则是对方序列号加上对方携带应用层数据的长度,
ack=对方seq+对方应用层长度
如果对方携带应用层数据长度为0,则ack与对方序列号相同,不要+1,
ack=对方seq
 
序列号:
在握手和结束时序列号应该是自己上次序列号+1,
seq=自己上次seq+1
传输数据时则是自己上次的序列号加上自己上次应用层数据发送长度,
seq=自己上次seq+自己上次应用层长度
如果数据长度为0,则seq与上次一样,不要+1,
seq自己=上次seq

 

posted on   sss大辉  阅读(12)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示