Tcp (transmission Control Protocol): 面向对象,可靠的,基于字节流的传输通信协议

特点:

  • 基于连接的:数据传输之前需要建立连接
  • 全双工的:双向传输
  • 字节流:不限制数据大小,打包成报文段,保证有效接收,重复报文自动丢弃
  • 流量缓冲: 解决双方处理能力的不匹配
  • 可靠的传输服务: 保证可达,丢包时通过重发机制实现可靠性
  • 拥塞控制,防止网络出现恶性拥塞

tcp 连接管理

TCP 连接: 四元组【原地址,源端口,目的地址,目的端口】

确立连接:TCP 的三次握手

  1. 同步通信双方初始序列号,(ISN)
  2. 协商TCP通信参数(MSS,窗口信息,指定校验和算法)

​ source port dest port

​ sequence number 保证数据有序传输

​ Acknowledgment number 应答机制

​ header unused CWR ECE URG ACK PSH RST SYN FIN Receive window:大小
​ length

​ Internet checksum Urgent data pointer

​ Options

​ data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qqb7JjhE-1603784609125)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201026173640444.png)]

三次握手

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。

确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。

​ 确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效

同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。

终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H1rxWQ3T-1603784589198)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201026173733320.png)]

ifconfig 查看运行的服务端口 序号1,2,3
tcpdump -i 序号 port 80 -S -c 3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJwKAHGt-1603784589203)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201027114545034.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MdmQBqlE-1603784589207)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201026180352649.png)]

SYN - SENT : Crete tcb (Transmission Control Block): 保存连接使用的源端口,目的端口,目的ip, 序号,应答号,对方窗口大小,自己窗口大小, 缓冲区等。

LISTEN: Crete tcb (Transmission Control Block): 保存连接使用的源端口,目的端口,目的ip, 序号,应答号,对方窗口大小,自己窗口大小, 缓冲区等。

1.服务器,Nginx 主动监听 80 端口的请求服务

2.客户端主动发起请求,此时syn = 1 建立连接, 并且生成一个seq(随机报文)= 2342342

3.服务端发出SYN: seq = y (请求客户端,建立连接), 并将客户端发送过来的随机报文,响应后生成新的ACK ack = x(2342342 ) + 1 发送给客户端,表示收到了信息。

4.客户端收到服务的的报文信息后,给服务端发送确认信息。ACK ack = y + 1

建立连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OLVG6VJs-1603784589214)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201027142753307.png)]

四次挥手

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0AQxzrli-1603784589217)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201027143226131.png)]

C: 发送FIN数据包,代表C不在发送数据

S: 收到请求,开始应答,避免了A重新发送FIN重试(应答机制)

S:处理完数据之后关闭,关闭连接,以及发送FIN请求

C: 收到请求后发送ACK报文,S服务可以释放连接

等待2MSL(maximm sefment lifetime, 报文最长存活时间) 后释放连接

1.防止报文丢失,导致B重复发送FIN

2.防止滞留在网络的报文,对新建立的连接造成数据扰乱。

字节流协议

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQng1riS-1603784589219)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201027144735524.png)]

传输的过程是根据:
字节流的大小根据数据的大小划分多个 数据包,包的最大量: 默认536 byte 实际数据

TCP 把应用交付的数据仅仅看成是一连串的无结构的字节流,TCP并不知道字节流的含义,TCP并不关心应用程序一次将多大的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥堵的程度来决定一个报文段应该包含多少个字节。

TCP协议的应用

数据可靠性传输(停止等待协议)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-phzLTBha-1603784589220)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201027150322686.png)]

重传机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vzDpFa44-1603784589222)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201027150431257.png)]

M1 发送报文消息给 服务端,服务端收到消息后,将相应消息返回给M1

但是M1 长时间没有收到服务端的ack 信息

此时; 超时的M1重新发送 报文,给客户端,客户端会进行排重

请求报文丢失

滑动窗口大小同通过TCP 三次握手和对端协商,且手网络状况影响

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vb3oDldG-1603784589224)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201027150809542.png)]

窗口滑动协议和累计确认(延时ack)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RooQEDG3-1603784589226)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20201027151342201.png)]

  1. 客户端根据服务端可接受的报文大小,发送服务端能接收的报文
  2. 如果在发送的过程中,部分报文丢失以后,在新的传输报文列表中,加入未到达服务端的报文
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值