tcp协议

 1.TCP协议头部结构

源/目的端口:表示数据从哪个进程发送,发送到哪个进程去
32位序号:发送的数据按照一个字节一个编号存放进去
32位确认号:用于给对方的响应,值为收到TCP报文段的序号值加1(表示当前的应答报文针对的是哪个消息进行的确认应答)
4位TCP报头长度:表示TCP头部有4个字节(32位),所以TCP头部最大长度为15*4=60
6个boolean值标志位:

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

16位窗口大小:进行流量窗口控制
16位校验和:检验数据是否一致
16位紧急指针:标识哪部分数据是紧急数据

2.TCP协议原理

TCP协议是对数据传输提供的一个管控机制,主要体现在可靠和效率两个方面,即在保证数据可靠传输的情况下尽可能的提高效率。

3.连接管理机制(三次握手,四次挥手)


真正发送数据之前,要先通过三次握手建立连接,不需要发送数据了,通过四次挥手断开连接

三次握手

1.客户端向服务端发送SYN,申请建立客户端到服务端的连接
2.服务端返回ACK(第一次SYN的应答)和SYN,申请建立服务端到客户端的连接
3.客户端收到数据,状态置为ESTABLISHED,表示客户端到服务端连接建立完成,并且发送ACK(第二次SYN的应答),服务端收到数据,状态置为ESTABLISHED,表示服务端到客户端的连接建立完成


三次握手主要是为了检查当前网络的情况是否满足可靠运输的基本条件,同时也是在检测双方发送和接收数据的能力是否正常 

四次挥手 

说明:关闭的时候服务端申请关闭或者客户端申请关闭都可以

1.客户端发送FIN到服务端,申请关闭客户端到服务端的连接
2.服务端收到FIN状态置为CLOSE_WAIT,并返回ACK应答(这个动作是系统实现TCP协议栈默认执行的,不需要程序来调用代码)
3.服务端发送FIN到客户端,申请关闭服务端到客户端的连接(程序手动调用socket.close发送)
4.客户端收到FIN返回ACK应答,并进入TIME_WAIT时间等待状态,客户端等待一段时间后,状态置为CLOSED,服务端收到应答后,状态置为CLOSED

4.TCP的异常情况

1.进程终止:进程终止会释放文件描述符,仍然可以发送FIN,和正常关闭没有什么区别
2.机器重启:和进程终止的情况相同
3.机器掉电/网线断开:接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了就会进行reset,即使没有写入操作,TCP自己也内置了一个保活定时器,会定期询问对方是否还在,如果对方不在,也会把连接释放
4.另外,应用层的某些协议,也有一些这样的检测机制,例如HTTP长连接中,也会定期检测对方的状态,例如QQ,在QQ断线之后,也会定期尝试重新连接

5.TCP协议特点总结


有连接:通过三次握手建立连接后才可接发数据,TCP协议是全双工的,即每端既可以发也可以收
可靠传输:网络数据传输是一跳一跳的,经过路途中的设备可能发生数据丢失,可靠传输是可能发生数据丢失但有机制保证对方能接收到
面向字节流:可以多次的收发数据(连接没有关闭时,可以多次的接收和发送数据)
有接收缓冲区和发送缓冲区:发送数据时,是先写到发送缓冲区,再刷新缓冲区(flush)
大小不受限制:多次的收发数据,每次的数据可以很大

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值