TCP协议笔记整理

TCP协议-------传输控制协议

一种面向连接的可靠传输协议,基于字节流,可靠的。

TCP协议建立的是双向连接

每一条TCP连接有且只能有两个端点,即每一条TCP连接只能是点对点的。

可靠、有序、无丢失、不重复。

TCP提供全双工通讯。

       发送缓存

                应用程序发送给发送方TCP准备发送的数据

                TCP已发送但是尚未收到确认的数据

        接收缓存

                按序到达但未被应用程序处理的数据

                乱序到达的数据

TCP是面向字节流的。

TCP连接的四元组:源IP、源端口、目IP、目端口。

套接字------->IP:port

TCP与UDP两者区别:

TCP的可靠传输主要通过:

建⽴连接(标志位):通信前确认通信实体存在。

序号机制(序号、确认号):确保了数据是按序、完整到达。

数据校验(校验和):CRC校验全部数据。

超时重传(定时器):保证因链路故障未能到达数据能够被多次重发。

窗⼝机制(窗⼝):提供流量控制,避免过量发送。

TCP协议头部结构

1.序号Sequence Number (32bit) :传输⽅向上字节流的字节编号。初始时序号会被设置⼀个随机的初始(ISN),之后每次发送数据时,序号值 = ISN + 数据在整个字节流中的偏移。

需要注意,这里的序号指的是字节流中某一个字节的序号,而不是报文段的序号。

2.确认应答号Acknowledgement Number (32bit):字段长 32 位,指下一次应该收到的数据的序列号。发送端收到这个确认应答以后,可以认为在这个序号以前的数据已经被正常接收了。

Seq(Sequence Number 的简写)为每一次 TCP 段中数据部分最后一个字节的序号,假设为 1000(数据长 100 个字节),此时接收端收到之后,会进行确认应答,应答时A(Acknowledgement Number 的简写)则为 1001,即下一次需要接收的数据的起始序号。

3.控制位Control Flag (8bit):

(1)ACK(Acknowledgement Flag):为1时,确认应答的字段变为有效。TCP规定除了最初建立连接时的SYN包之外该位必须置位1.

(2)SYN(Synchronize Flay):用于建立连接,为1表示希望建立连接,并在其序列号的字段进行序列号初始值设定。

(3)FIN(Fin Flag):为 1 时表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相关交换 FIN 位置为 1 的 TCP 段。每个主机又对对方的 FIN 包进行确认应答以后就可以断开连接。不过,主机收到对方的FIN包以后不必马上回复FIN包,而是可以等到缓冲区中所有数据都因为发送成功而被自动删除之后再发。

TCP报文段

确认序列号:1、该序列号表示接收方期望收到发送方发送下一个字节的序号。

                      2、代表接受方已收到该确认序列号之前的所有字节。

窗口值:指发送方可以不需要接受确认报文,就可以连续发送的数据最大量。

选项文字:MSS、时间戳、选择确认机制、窗口因子。

IP分片

MTU - 最大传输单位 ---在以太网当中为1500字节----设备双方通过协商得出MTU数值后,则在链路中传输的报文的最大字节为MTU数值。

TCP分段 :因为 IP 分片后, TCP 协议无法保证数据的可靠性传输;故而使用 TCP 协议进行封装的文件不允
许进行 IP 分片,而又因为 MTU 存在,需要将大文件分为小文件,该操作由 TCP 协议完成。
MSS--- 最大传输段 ===MTU-IP 头部 -TCP 头部
TCP 协议中,每一个报文都需要有序列号信息
TCP的可靠性机制
确认机制 ---- 每收到一个 TCP 数据段,都需要发送一次确认报文。
重传机制 ---- 超时重传 ,当一个数据段中的某个报文丢失,发送端会主动重新发送一次该报文。
排序机制 ---- 传输数据段时,被分为多个报文,从不同路径传输,最终达到目的地的顺序会被打乱,需要根据序列号字段进行重新排序。
控制机制(滑动窗口机制):可以通过调节窗口大小(Windows)来对流量进行控制。

TCP连接管理

- 三次握手

第1次握手:客户端发送一个带有SYN标志的数据包给服务端。客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)

第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。

第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。

- 四次挥手

第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN-WAIT-1状态。客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成)

第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE-WAIT状态。服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)

第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST-ACK状态。服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)

第4次挥手:客户端收到FIN后,客户端t进入TIME-WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)

其中:FIN标志位数置1,表示断开TCP连接。

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值