-TCP)
1.TCP协议结构TCP头部可变长20—60B头部就是上图除了数据以外的其余部分。基础长度16163232466161616160bit20byte4位首部长度有无选项4bit表示范围0~15数据单位是4byte意思是这个字段里写的数字x4TCP头部粽子节数。最小数字是5取值为5——》5x420字节没有选项基础头部取值为6——》6x424字节原来20字节的基础上选项部分增加4字节取值为15——》15x460字节原来20字节的基础上选项部分增加40字节保留位6位目前不用保留以便后续使用6个标志位2.TCP特性有连接可靠传输面向字节流全双工。可靠传输主要是虽然不能100%送达消息给对方但是可以知道对方是否收到。如果对方收到传输完成如果对方没有收到重传3.TCP核心机制1.确认应答机制第一轮假设客户端向服务器发送一个字符串abc共3个字节假设客户端的ISNInitial Sequence Number1000每个字节都有独立的编号a—1000,b——1001,c——1002,32位序号客户端发送报文seqSequence Number1000携带数据abc含义这个报文里第一个字节a的编号是1000。seq标记本段数据第一个字节的编号。32位确认序号服务器收到abc后返回ACKAckonwledgement Number 1003含义服务器告诉客户端1003之前的所有字节我全都收到了下一次希望收到编号为1003的字节。第二轮客户端发送字符串11qseq10031——1003,2——1004,q——1005服务器收到后返回ack1006。2.超时重传机制丢包有两种情况1.客户端数据在发送过程中丢包了2.服务器的ack丢包了。丢包后内核会重传。但是如果是这样的场景客户端向服务器发送扣款10000元的请求——》服务器接收后扣除——》服务器向客户端发送ack——》ack丢包客户端没有收到ack但是此时理论上客户端不能重传但实际上客户端不能分清是哪种情况只要超时时间一到客户端一定会重传此时就有了接收缓存区机制避免这种情况。接收缓存区服务器和客户端都有一个接收缓存区。传输的数据包给每个字节都排序数据到达对方后先进入接收缓存区在这个区内对:序号重复的数据去重。服务器收到重复的seq报文识别出是重复数据直接丢弃重复报文顺序错乱的数据根据序号重新排队。但是重传是有限度的如果连续重传多次都没有达到对方——》网络出现严重故障当重传到达一定次数发送方认为对方网络故障放弃当前的TCP连接把对端的信息删除。超时时间间隔随着次数的递增超时时间间隔逐渐增大3.确认应答和超时重传是TCP实现可靠传输的最核心机制4.连接管理建立和断开连接是操作系统内核完成的过程应用程序对这两个过程感知有限TCP如何建立连接三次握手handshakeTCP如何断开连接