简述tcp协议三报文握手过程_华为原理 | 传输层协议&交换转发原理

60818ba6efa3d3108d01a2e80abea13d.png

Interface GigabitEthernet0/0/0 ip address 12.1.1.2 255.255.255.0 arp-proxy enable  \\华为接口下默认没有开启代理ARP

TCP协议:

TCP(Transmission Control Protocl)协议工作在TCP/IP通信模式的传输层,TCP是可靠传输协议,在传输数据之前需要先和接收者建立连接,通过序列号机制和重传机制保证TCP数据的可靠性。

TCP协议特性

  • 面向连接协议

  • 会话多路复用

  • 全双工模式

  • 错误检查

  • 数据包序列化

  • 可靠性机制

  • 数据恢复功能

  • 数据分段

  • 窗口机制   

TCP报文格式

TCP报文头部是可变长头部,最小头部长度是20个字节,最大是60个字节。头部长度的计算方法和IP一致,同样是通过4个比特来标识TCP报文头部长度。图中展示了TCP协议报文结构。

47fc0c549ded42d1be37d56044c75f53.png

图 TCP协议报文结构

1、源端口(16 bit):TCP数据发送方的源端口号

2、目的端口(16 bit):TCP数据接收发的目的端口号

3、序列号(32bit):序列号用来标识从TCP发送端向TCP接收端发送的数据大小统计,单位为字节。通过序列号可以计算出发送方向接收方一共发送了多少个字节的数据。序列号是32 bit的无符号整数,取值范围是1到2的32次方范围内的随机数,序列号到达2的32次方-1后会从0开始计算。

4、确认序列号(32bit):确认序列号用来标识TCP接收端从TCP发送方共计接收了多少个字节的数据,确认序列号的计算是在接收到TCP报文“序列号”的基础上加上接收的数据长度作为确认序列号。在TCP协议中所有的控制报文算一个字节的数据,例如:SYN、FIN报文都数据控制报文。

5、首部长度(4bit):TCP的首部长度是可以变长的,首部长度范围为20个字节~60个字节,标准头部长度为20个字节。那么4个bit的首部长度最大值表示为15,那如何用来表示20~60个字节呢?这是因为这4个bit不是用来表示长度的,而是表示头部中携带的数据行数。每一行的数据长度固定为4个字节,这样可以用行数乘以4,计算出TCP头部长度,15乘以4等于60,这也是可以表示的最大TCP头部长度。

6、TCP标志位(16bit):其中3个比特位是保留位,另外ns、cwr、ece 标志位不常用,这里不做介绍。我们主要介绍后面6个比特位。

  • URG:紧急指针(urgent pointer)有效,只有URG标志位置位,紧急指针字段才会填充数据。ACK:确认标志位,用于确认接收到的TCP报文。

  • PSH:PSH标识位置位,表示TCP报文不进缓冲区,需要提交给应用层尽快处理。

  • RST:重建标志位,需要重新建立TCP会话。

  • SYN:建立连接标志位,需要建立TCP会话。

  • FIN:断开连接标志位,需要断开TCP会话。

7、窗口尺寸(16bit):窗口大小最大为65535,标识TCP接收方当前可以处理的数据大小。窗口大小是可以滑动的,可以变大也可以变小。这个和TCP接收方的处理能力有关系,如果TCP接收方处理能力下降,它会将窗口大小调小,这样TCP发送方发送的数据大小也会随之变小。如果TCP接收方处理能力变强,它会将窗口大小调大,TCP发送方发送的数据大小也会随之变大。

8、效验和(16bit):TCP发送端对TCP头部和TCP填充数据做效验,并将结果填充到效验和字段。TCP接收方收到数据后,会重新对TCP头部和TCP填充数据做效验,并和效验和字段的值对比对,如果一致则接收数据段并交给上层处理,不一致则丢弃数据段。

9、紧急指针(16bit):只有当URG标志位置1时紧急指针才有效,紧急指针是一个正向偏移量,和序列号字段中的值相加表示紧急数据最后一个字节的序号。TCP紧急方式是发送方向接收方发送紧急数据的一种方式,紧急指针用于紧急处理TCP的控制数据。

10、选项:标准TCP头部中不携带选项字段,选项字段只能按4字节的倍数来填充(用于计算首部长度)。常见的选项字段有MSS和TCP MD5认证,MSS(Max segment size)最大段大小,用于表示标识TCP数据段可以填充的最大数据长度,TCP的数据分段可以避免IP分片。TCP MD5认证选项用来实现TCP认证的功能,在后续学习的BGP、LDP等协议中,可以利用TCP MD5实现认证功能。

数据:填充TCP数据,数据最大只能填充为MSS大小。

TCP会话的建立

由于TCP是一个面向连接的协议,发送数据前需要先和接收者提前建立连接,连接通常称之为“会话”。TCP通过三次握手的可靠性机制来建立会话,所谓三次握手是指在TCP会话的建立过程中总共交换了3个TCP控制报文,通过这3个控制报文保证了TCP会话建立过程中的可靠性。TCP三次握手建立过程如图中所示:

8f0415927a0a4c19c26424a1c99b680c.png

图 TCP三次握手建立过程(一)

如图中所示,假设现在主机A需要向主机B发送TCP数据,首先由主机A发起会话建立,向主机B发送一个设置“SYN”标志位的TCP控制报文,表示想和主机B建立会话连接,报文中的SEQ序列号字段会填充一个0到2的16次方范围内的随机数(只有SYN标志位置位的TCP报文才会填充一个随机数),图中SEQ序列号用0表示。

主机B收到SYN置位的TCP报文后,知道有人想和自己建立连接,主机B接收SYN报文并向主机A回复一个同时设置了“SYN”和“ACK”标志位的TCP报文,其中的“ACK”表示主机B同意和主机A建立连接,并确认主机A发送的“SYN”报文。而“SYN”表示主机B同时想和主机A建立一个会话连接,这是因为TCP协议是全双工模式,建立一个会话可以实现数据的双向发送。

29e2f7d2ac0dfaa51e73b19f355877d5.png

图TCP三次握手建立过程(二)

报文中的SEQ序列号字段填充一个0到2的16次方范围内的随机数,图中主机B发送的序列号同样用0表示。而确认序列号=接收到的序列号+数据长度,由于TCP协议中的控制报文的数据长度也算作一个字节,所以图中的ACK SEQ为1(0+1)。通过确认序列号可以统计出已接收的数据总长度。如图中所示:

主机A收到主机B发送的“SYN+ACK”后,回复一个“ACK”置位的TCP报文进行确认。回复的ACK报文中,SEQ序列号字段为1(0+1),由于主机A之前发送的SYN报文中的序列号为0,并且已经发送过一个字节数据(SYN报文),所以现在的SEQ序列号为1。通过序列号字段可以统计出发送方已发送的数据总长度。ACK SEQ确认序列号为1=主机B的发送序列号+数据长度(0+1)。如图中所示:

657f507028ae1bef973926ace8f16dcf.png

图TCP三次握手建立过程(三)

经过三次握手,主机A和主机B建立了两个TCP会话,实现数据的双向发送。

TCP会话的终止

TCP会话的终止需要经过四次握手断开连接,原因是TCP 的会话是双向的,会话两端独立的发送和接收数据,那么终止会话就需要双向断开连接。例如:主机A和主机B建立TCP会话后两端都开始发送TCP数据,如果现在主机A的数据发送完了,主机A向主机B提出断开连接,这只是个单方向的行为,只会断开主机A到主机B的连接。而主机B到主机A的连接还保持正常,主机B还可以向主机A继续发送数据,如果现在主机B的数据也发送完了,主机B向主机A提出断开连接,连接双向断开后TCP会话终止。TCP协议四次握手终止会话的过程如图中所示:

c21a1f87665f1f5d7577e5400c60e214.png

图  TCP四次握手断开连接

图中主机A向主机B发送完数据后,主机A断开和主机B的连接。主机A向主机B发送一个FIN置位的TCP控制报文,主机B收到FIN报文后,回复ACK报文确认收到的FIN。由于主机B也没有数据在发给主机A,随后主机B也向主机A发送一个FIN置位的TCP控制报文,断开和主机A的连接。主机A收到FIN报文后,回复ACK报文确认收到的FIN。

TCP的确认与重传

TCP协议发送的数据通过确认和重传机制来保证可靠性,数据发送方用序列号来标识发送的数据,数据接收方收到数据后向发送方回复ACK进行接收确认,并通过确认序列号(ACK SEQ)确认接收到的数据长度。数据发送方收到ACK确认后知道接收方已经收到了数据,可以继续发送数据。如果收不到ACK,则说明接收方可能没有收到发送的数据,为了保证数据的可靠性,发送方需要重传丢失的数据。

在TCP协议中判断数据丢失需要重传的机制有两种,分别是定时器超时和快速重传机制,定时器超时是指在超时定时器规定时间内,都没有收到数据接收方回复的ACK确认,认为发送的这部分数据丢失,需要重新发送。通过这种方式数据发送方可以判断出发送的数据已经丢失,但是每次都需要等定时器超时,发现的速度太慢。那我们可以想一下,是谁最先发现数据丢失的呢?答案肯定是数据接收方,接收方收不到数据只有两种情况,1、根本就没收到数据 2、收到的数据不完整。针对第一种情况只能靠发送方定时器超时后重传,而第二种情况接收放知道自己有哪部分数据没有收到(通过序列号机制), 那么接收方可以通过发送多个针对于丢弃数据的ACK确认报文(3个以上)来告知发送方这部分数据丢失,发送方在收到针对同一数据的多次ACK确认后,触发快速重传,重新发送这部分数据。

a6720d025e17c23aeceaa44709a8e0b0.png

图 TCP协议数据确认机制

图中展示了TCP数据传输过程中的确认机制,主机A发送第一个数据段,标识数据段的序列号SEQ为1369,数据段长度是400个字节,主机B收到数据段后回复ACK报文确认数据段,ACK报文中的ACK SEQ=接收数据段中的序列号(1369)+ 数据长度(400),计算出回复的确认序列号为1769。主机A收到ACK 后开始发送第二个数据段,第二个数据段的SEQ1769(1369+400),标识已经发送过的数据长度,主机B收到第二个数据段后回复确认ACK,以此类推。

08eddfa2b6b0ec068668c6e7dbc59ab5.png

图 TCP协议数据重传机制一

图中主机A在传输数据段过程中,部分数据段丢失,针对这部分数据段一致没有收到ACK确认,主机A等待超时定时器超时后重传丢失的数据段,这种依赖定时器超时来重传数据段的机制速度较慢,这种场景下可以使用快速重传。快速重传机制如图中所示:

705bea75e80701261312258523a4a1d3.png

图 TCP协议数据重传机制二

图中,主机B针对丢失数据段发送多个ACK确认报文,主机A连续收到多个同样的ACK报文,会触发快速重传机制,重传这部分数据段,不需要待定超时定时器超时。

TCP滑动窗口

TCP协议的窗口机制有两种,一种是通告窗口,另一种是拥塞窗口。通告窗口是数据接收方通告给发送方自己现在能够缓存和处理数据的大小,通告窗口的大小是可变的,这和接收方当前的处理能力有关,如果接收方当前处理能比较强,接收方会将通告窗口调大并告知发送方,发送方就会增大数据发送量。如果接收方当前处理能力比较弱,接收方会将通告窗口大小调小并告知发送方,发送方就会减小数据发送量,这种调整通告窗口大小的机制叫做“滑动窗口”。而拥塞窗口用于控制数据的发送速率,TCP的数据发送方式采用慢启动方式,每次发送的数据大小按2次方的方式成线性增长,持续增长过程中如果网络出现拥塞并造成TCP数据段丢失,拥塞窗口会降为当前值的一半,将TCP发送数据的速率降为之前的一半,避免网络拥塞导致的TCP重传,降为一半后再次执行慢启动的增长方式。图中展示了滑动窗口工作原理。

e25ce0a84f76028fe1a48c27952ef4f2.png

图 滑动窗口工作原理

  图中主机A为数据发送方,主机B为数据接收方。主机B通告给主机A的窗口大小为3,标识现在自己可以缓存和处理3个数据段,主机A收到主机B通告的窗口大小后,会按窗口的大小给主机B发送数据,一次性给主机B发送了3个数据段,之后便不在发送。因为主机A知道主机B只能处理3个,所以发送3个数据段后便不在发送,等于主机B的确认。

  主机B收到数据段后,将数据段放入到缓存中等待处理,主机B在回复ACK的时候只处理了缓存中一个数据段,所以主机B将回复ACK报文中的窗口大小调小,调整为1。主机A收到ACK确认后,从报文中获取到接收方的窗口大小为1,说明现在接收方只能处理1个数据段,后续主机A只向主机B发送了一个数据段后便不在发送,等待主机B的确认。

应用端口

使用TCP协议作为传输层协议的应用程序列表如下所示:

端口

协议

说明

21

FTP

文件传输协议,用于上传、下载

23

Telnet

用于远程登录,通过连接目标计算机的这一端口,得到验证后可以远程控制管理目标计算机

25

SMTP

简单邮件传输协议,用于发送邮件

53

DNS

域名服务,当用户输入网站的名称后,由DNS负责将它解析成IP地址,这个过程中用到的端口号是53(其实大多数情况下DNS采用UDP 53端口)

80

HTTP

超文本传输协议,通过HTTP实现网络上超文本的传输

表7-1 TCP端口列表

MAC地址表(CAM表=内容可寻址内存)

交换机收到数据帧以后学习数据帧中源MAC地址构建MAC地址表。由于MAC地址是保存在内存中,那么交换机断电或者重启后MAC地址表丢弃。

构建MAC地址表之后,后续收到数据帧通过帧头中的目的MAC地址查询MAC地址表实现转发。

MAC地址表的组成部分

1、MAC地址(单播) 

2、接口ID  

3、VLAN ID

交换机的转发行为:

1、泛洪:组播帧、广播帧、未知单播帧

2、转发:目的MAC地址存在于MAC地址表中,

3、过滤(丢弃): 避免数据帧的转发环路

交换机MAC地址的学习法则:

1、交换机的一个端口可以同时绑定多个不同的MAC地址

2、同一个MAC地址只能绑定到交换机的一个接口

  交换机中有一个MAC地址表,里面存放了MAC地址与交换机端口的映射关系。MAC地址表也称为CAM(Content Addressable Memory)表。

  如图所示,交换机对帧的转发操作行为一共有三种:放洪(Flooding),转发(Forwarding),丢弃(Discarding)。

  • 泛洪:交换机把从某一端口进来的帧通过所有其它的端口转发出去(注意,“所有其它的端口”是指除了这个帧进入交换机的那个端口以外的所有端口)。

  • 转发:交换机把从某一端口进来的帧通过另一个端口转发出去(注意,“另一个端口”不能是这个帧进入交换机的那个端口)。

  • 丢弃:交换机把从某一端口进来的帧直接丢弃。

交换机的基本工作原理可以概括地描述如下:

如果进入交换机的是一个单播帧,则交换机会去MAC地址表中查找这个帧的目的MAC地址。

1)如果查不到这个MAC地址,则交换机执行泛洪操作。 

2)如果查到了这个MAC地址,则比较这个MAC地址在MAC地址表中对应的端口是不是这个帧进入交换机的那个端口。如果不是,则交换机执行转发操作。如果是,则交换机执行丢弃操作。如果进入交换机的是一个广播帧,则交换机不会去查MAC地址表,而是直接执行泛洪操作。

[SW1]display mac-address  \\查看MAC地址表[SW1]display mac-address aging-time   \\查看MAC地址老化时间  Aging time: 300 seconds[SW1]mac-address aging-time ?  \\配置老化时间范围,默认是300S,如果配置为0代表永远不老化  <0,10-1000000>  Aging-time seconds, 0 means that MAC aging function does not work
8e21b145ca74d496604925c27ba5c6b4.png

努力学习,勤奋工作,让青春更加光彩

ebbf50e3a86d6701024babf426a89daf.png

再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值