学习网络之旅(二)——TCP(1.0)

一、TCP数据包简介

简单说一下传输层的复杂点:

  • 既有TCP协议,又有UDP协议;
  • 安全加密协议TLSv1.2;
  • 以及在传输层之上的各种协议;

本篇我们只考虑TCP协议的内容!!!

TCP数据包的控制位
1、数据包流程——方便理解包如何由硬件向高层传输

(1)浏览器(客户端)生成请求;
(2)委托操作系统发送请求;
(3)由网卡将消息转换成相应的信号后,发送到网络中;
(4)Web服务器收到请求后,通过网卡(网线)回复数据包;
(5)由操作系统(协议栈)整理,暂时存入缓冲区中(这个是重点);
(6)然后TCP有个优点——即窗口从缓冲区中读取数据;
(7)最后是发给高层应用;

2、TCP控制位

再说三次握手之前,我觉得有必要说说TCP包的控制位,控制位占了6个比特。

  • URG —— 表示紧急指针。Urgent
    如果数据包有这个字段,回复的时候不必经过缓冲区进行排队直接交给高层应用 (相当于有免死金牌)
  • ACK —— 表示数据包接收到了。给对方一个回复,通知的作用。Acknowledgment。
  • PSH —— 数据在缓冲区中,协议栈给它排队“ 你排第一好了 ” 下次第一个发的包就是 push。
  • SYN —— 发送方和接收方需向确认序号,用于连接操作。
  • FIN —— 正常断开连接。
3、TCP的三次握手

直接上图:

在这里插入图片描述
(1)A 给 B先发一个SYN包,用去确认连接操作;
(2)B 收到包后给A回复一个SYN/ACK包,用于确认并且告诉A我收到了;
(3)A 发送一个ACK包,告诉B我也收到了。
这样三次握手才算成功!连接才建立成功!接下来才可以进行正常的数据传输了!!!

二、通过抓包分析

上面三次握手成功后,连接才建立成功,接下来将是正常的数据传输!!!

1、第一个包 FIN/ACK包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2、第二个数据包 SYN

在这里插入图片描述

3、第三个数据包 SYN/ACK

在这里插入图片描述

4、第四个数据包 ACK(看窗口大小,可知这个包是回复的数据包);

在这里插入图片描述

5、来看个 RST/ACK 数据包;

在这里插入图片描述

6、ACK/PSH

在这里插入图片描述

6.1> 在Linux下可以通过以下命令查看和设置窗口扩大因子功能;

在Linux下可以通过以下命令查看和设置窗口扩大因子功能:

命令:cat /pro/sys/net/ipv4/tcp_windows_scaling

在这里插入图片描述

7、TLS加密

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • GMT 格林尼治平均时。 这是因为世界上时间和地理有关,为了有个统一的对话基础
    将GMT作为(0时区)基准。
  • 在GMT下 ,Unix time,Unix epoch,POSIX time,Unix timestamp
    可以认为上面时间是一致的,数值上都从1970年1月1日0时到当前的秒数。

在这里插入图片描述
可以看到为了安全性的加密,所使用的加密算法布置一种。

在这里插入图片描述

在这里插入图片描述
接下来就是服务求交换密码;

在这里插入图片描述

一个包做了三件事:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这样连接过程建立后,接下来传输的数据就是加密的。

在这里插入图片描述

8、看看几个异常的TCP包
(1)TCP ZeroWindow

通过Socket编程,发送TCP包,如果只send,不Recv的话,会导致TCP ZeroWindow,导致双方无法继续发送数据,一段时间后TCP就会断开。

在这里插入图片描述

(2)TCP虚假重传

一般原因:

  • 移动网络切换过程可能导致虚假重传;
  • 网络带宽较小时;
  • 原始包和重传包丢包。
(3)TCP Retransmission 重传

在这里插入图片描述
Warning 是 RST
在这里插入图片描述

(4)TCP传输过程中,同一台主机发出的数据段应该是连续,即,后一个数据包的seq=前一个数据包的seq+len(三次握手和四次挥手除外)。如果抓包引擎发现后一个包的seq大于前一个seq+len,说明中间有数据包丢了。

在这里插入图片描述

(5)和中间丢包相反,如果发现后一个数据包的seq小于前一个数据包的seq + len的值,说明数据包乱序了。

在这里插入图片描述

(6)TCP Dup Ack x#y——> 乱序或者丢包时,接收方就回收到一些比期望值大的数据包。每次收到这种包就回Ack一次期望的seq值,以此来提醒发送方。就产生了这中ACK包,并添加标记:TCP DUP ACK;

在这里插入图片描述

(7)这个回收到TIME_WAIT的端口(connect会堵塞)
(8)TCP FAST Retransmission 当发送方收到3个或者以上【TCP DUP ACK】就意识到了之前发的数据包可能丢了,就回快数重传(RFC规定)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值