TCP报头

Tcp协议

   即Transmission Control Protocol,传输控制协议,要对数据的传输进行一个详细的控制.


 TCP 协议段格式

 

 源/目的端口号:表示数据从哪个进程来,到哪个进程去;

 4位首部长度  记录的是tcp报头长度 .与udp区别在于长度不固定.变化为选项长度  首部长度的值-20 得到就是选项部分的长度.  ps 如果首部长度显示是5.即tcp报头长度为4*5=20.

6 位标志位 

URG紧急指针是否有效
ACK确认号是否有效
PSH提示接收端应用程序立刻从tcp缓冲区将数据拿走
RST对方要求重新建立连接将携带RST标识称为复位报文段
SYN请求建立连接,将携带SYN标识称为同步报文段
FIN通知对方 即将关闭

16 位校验和: 发送端填充 CRC校验.如接收端校验不通过.认为数据有问题

16 位紧急指针: 标识哪部分数据是紧急数据

TCP在数据传输方面 ①安全 ②效率

确认应答机制  

(TCP对每个字节的数据进行编号,即为序列号)  告诉发送者,已经接受到了哪些数据;并且告知下次从哪开始.(在主机A在发送数据时就是从201开始,(即在200的基础上+1)

确认应答即是告诉主机A 序列号200以前的我都收到了,可以继续传输.

 在数据丢失时会引发 超时重传机制

主机A发送数据给B之后,可能因为网络6拥堵等原因,数据无法到达主机B;

如果主机A在一个特定的时间间隔内没有收到B发来的确认应答,就会进行重发.

也是,主机A未收到B发来的确认应答,也可能因为ACK丢失了

 

因此主机B会收到许多重复数据,即TCP协议需要能够识别出哪些包重复的,并且把重复的包丢弃掉.

此时利用序列号,就很容易做到去重效果.(即在每条发送消息有一个序号,当接收信号有重复时,会删除其中一个),实现优先级队列.

超时重传机制,即在发送方发送消息后一段时间没有收到ACK,就会引发超时重传

那么,如何确定超时的时间

① 在理想情况下,找到一个最小时间,保证确认应答一定在这个时间内返回.

② 但在这个时间的长度,随着网络环境不同,存在差异.

③如果超时时间设置设太长,会影响整体重传效率.

④如果超时时间设太短,会频繁发包.

 连接管理机制(安全机制)

再正常情况下,Tcp要经过三次握手建立连接,四次挥手断开连接.

 

  [CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN状态,等待客户端连接;

[LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段),就将该连接放入内核等待队列 中,并向客户端发送SYN确认报文。

[SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文,就进入ESTABLISHED状 态,可以进行读写数据了。

[ESTABLISHED -> CLOSE_WAIT] 当客户端主动关闭连接(调用close),服务器会收到结束 报文段,服务器返回确认报文段并进入CLOSE_WAIT;

[CLOSE_WAIT -> LAST_ACK] 进入CLOSE_WAIT后说明服务器准备关闭连接(需要处理完之前 的数据);当服务器真正调用close关闭连接时,会向客户端发送FIN,此时服务器进入 LAST_ACK状态,等待最后一个ACK到来(这个ACK是客户端确认收到了FIN)

[LAST_ACK -> CLOSED] 服务器收到了对FIN的ACK,彻底关闭连接。 客户端状态转化: [CLOSED -> SYN_SENT] 客户端调用connect,发送同步报文段;

[SYN_SENT -> ESTABLISHED] connect调用成功,则进入ESTABLISHED状态,开始读写数 据; 

[ESTABLISHED -> FIN_WAIT_1] 客户端主动调用close时,向服务器发送结束报文段,同时进 入FIN_WAIT_1;

[FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认,则进入FIN_WAIT_2, 开始等待服务器的结束报文段;

[FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段,进入TIME_WAIT,并发 出LAST_ACK;

[TIME_WAIT -> CLOSED] 客户端要等待一个2MSL(Max Segment Life,报文最大生存时 间)的时间,才会进入CLOSED状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值