传输层TCP协议

面向连接,可靠传输,面向字节流

TCP协议

面向连接

     accept:获取新连接

         1.当调用accept之后,内核就会为新连接创建一个套接字描述符,服务端使用该套接字描述符进行和客户端进行数据通信

         2.连接建立之后,双方都可以发送数据

    确认msg1:确认的行为是传输层TCP协议的行为,不是应用层的行为,当确认之后,确认的数据就缓存在TCP的接收缓冲区

                       应用层可以调用recv函数从接收缓冲区中拷贝数据

    MSL:最大报文段生存时间,指的是发送方认为TCP报文在网络中的最大生存时间

    2MSL = 丢失ACK的MSL + 重传FIN的MSL

 

地址复用问题

    如果一个TCP服务端程序需要立即重启一个服务端程序,再重启的过程需要绑定端口。由于连接状态并没有变成CLOSED,服务器断开连接,就会产生TIME_WAIT状态,在2MSL时间里,内核会拿着端口,等待2MSL这个行为是TCP行为,即使程序退       出,内核还占用着对应端口。

解决方法:int setsockopt(int sock, int level, int optname, const void* optval, socklen_t len)

 

目的端口:接收方在进行数据分用的时候,传输层TCP协议通过端口,可以将数据提交给指定侦听的应用层程序,传输层在通过目的端口来区分数据属于那一个进程

 

32位序号:标识TCP源端向TCP目的端发送数据字节流

32位确认序号:标识TCP目的端期望TCP源端的下一个请求序号

注意:

    1.在TCP通信过程中,客户端和服务端各维护一套序号

    2.在消息接收方需要确认接收的数据进行确认,在确认的时候,需要组织确认序号,确认序号是期望对方发送的下一个序号

    3.在TCP数据传输过程当中,ACK数据包并不会消耗序号

    对于一次三次握手而言,双方在发送第一个数据包的时候,是在协商彼此的起始序号的位置,对于每一个连接双方而言,自己管理的序号不一定是从0开始

    对于发送数据而言,整体消耗的序号 = 起始序号 + 数据长度 -1,确认序号 = 起始序号+数据长度

 

4位首部长度

    0000~1111(0x00~0xf)

    首部长度字节大小 = 4*15 = 60  --》TCP协议头部最大字节60字节

6为保留位

6个标志位

     URG紧急标志位:配合紧急指针来使用

     ACK标志位:表示确认数据

     PHS标志位:表示发送数据

     RST标志位:重置连接

     SYN:发起连接

     FIN:断开连接

 

16位窗口大小:2字节数据,窗口范围(0-2^16)

16位校验和:检验数据是否完成

16位紧急指针:和URG标志位一起使用,如果URG标志位为1,则紧急指针指向的数据有效

选项:剩余40个字节,可以加上一些选项,比如MSS最大报文段长度

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值