TCP与UDP

TCP的报文格式

TCP的三次握手

•TCP连接建立的详细过程如下:

▫由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号a为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0;

▫接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;

▫PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。

通过SSH实验来深刻理解三次握手

 

Server配置IP地址省略

先配置AR1与AR2的IP地址

<Huawei>sys

[Huawei]sys AR1
[AR1]int gi 0/0/0
[AR1-GigabitEthernet0/0/0]ip add 192.168.1.1 24
[AR1-GigabitEthernet0/0/0]

<Huawei>sys

[Huawei]sys AR2
[AR2]int gi 0/0/0
[AR2-GigabitEthernet0/0/0]ip add 192.168.1.2 24
[AR2-GigabitEthernet0/0/0]

在AR1上配置SSH服务

[AR1]aaa
[AR1-aaa]local-user qyt password cipher abc.123
Info: Add a new user.
[AR1-aaa]local-user qyt privilege level 15
[AR1-aaa]local-user qyt service-type ssh
[AR1-aaa]q

[AR1]ssh user qyt authentication-type password
 Authentication type setted, and will be in effect next time
[AR1]stelnet server enable 
Info: Succeeded in starting the STELNET server.
[AR1]user-interface vty 0 4
[AR1-ui-vty0-4]authentication-mode aaa
[AR1-ui-vty0-4]protocol inbound ssh 

 然后去AR2(客户端)上配置第一次登录时使能ssh,并连接AR1,抓包

[AR2]ssh client first-time enable 
[AR2]stelnet 192.168.1.1
Please input the username:qyt
Trying 192.168.1.1 ...
Press CTRL+K to abort
Connected to 192.168.1.1 ...
The server is not authenticated. Continue to access it? (y/n)[n]:y
Sep  4 2023 00:42:22-08:00 AR2 %%01SSH/4/CONTINUE_KEYEXCHANGE(l)[1]:The server h
ad not been authenticated in the process of exchanging keys. When deciding wheth
er to continue, the user chose Y. 
[AR2]
Save the server's public key? (y/n)[n]:y
The server's public key will be saved with the name 192.168.1.1. Please wait...

Sep  4 2023 00:42:24-08:00 AR2 %%01SSH/4/SAVE_PUBLICKEY(l)[2]:When deciding whet
her to save the server's public key 192.168.1.1, the user chose Y. 
[AR2]
Enter password:
<AR1>

 抓到了TCP三次握手的报文,AR2用自己的随机端口连接AR2的22端口,发送第一个SYN位置值为1的报文,序列号为0,因为没有收到回来的报文所以现在没有ACK值,然后AR2回包给AR1,此时的SYN位置值为1,AR1随机发起一个序列号,由于AR1收到了AR2得SYN包,AR2要进行确认,所以他的ACK位置值为1,确认的序列号是0+1,之后AR2再回复一个ACK给AR1,此时的ACK位置又置为1,这里的Seq值为1的原因是之前AR1的ACK为1,表示希望下一次(也就是是现在AR2给AR1最后一个回包)的Seq为1,然后ACK的序号为1,表示AR2对上一次AR1的SYN进行回复,所以是0+1就是1

通过FTP实验来深刻理解三次握手

配置Server为FTP服务器,步骤省略(选择一个目录,并启动FTP服务)

AR2连接FTP服务器,并抓包

<AR2>ftp 192.168.1.3
Trying 192.168.1.3 ...

Press CTRL+K to abort
Connected to 192.168.1.3.
220 FtpServerTry FtpD for free 
User(192.168.1.3:(none)):
331 Password required for  .
Enter password:
230 User  logged in , proceed

[AR2-ftp]dir
200 Port command okay.
150 Opening ASCII NO-PRINT mode data connection for ls -l.
drwxrwxrwx  1           nogroup            0 Sep 3  2023 HCIA
drwxrwxrwx  1           nogroup            0 Sep 2  2023 HCIA-Datacom

226 Transfer finished successfully. Data connection closed.
FTP: 1583 byte(s) received in 0.110 second(s) 14.39Kbyte(s)/sec.

[AR2-ftp]get test.txt
200 Port command okay.
150 Sending test.txt (0 bytes). Mode STREAM Type BINARY
226 Transfer finished successfully. Data connection closed.
FTP: 0 byte(s) received in 0.280 second(s) 0.00byte(s)/sec.

[AR2-ftp]

这里抓到了与FTP服务器21端口的三次握手,FTP21端口是控制端口负责各种控制命令,三次握手原理和刚才的SSH服务同理

又抓到了FTP主动模式,FTP服务器使用20端口与客户端传输文件,FTP服务器主动与客户端进行三次握手,三次握手原理和刚才的SSH服务同理

TCP的四次挥手

TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。如图所示:

1. 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;

2. PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。

3. 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。

4. PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。

通过刚刚的数据包分析四次挥手

 这是刚刚FTP服务器的20端口传输完数据后的四次挥手,首先服务器先发送FIN字段值为1和ACK字段为1的报文,Seq和ACK的序列号都为1,然后客户端的ACK字段值置为1,回复的Seq为1(因为刚刚服务器发来的ACK序列号为1,希望客户端会给他的Seq序列号为1),之后客户端这里也没有数据传输给服务器了,他也发送了一个FIN字段值为1和ACK字段为1的报文,这次序列号和ACK序列号的值和ACK的一样,之后服务器发送一个ACK字段值为1的报文,且Seq序列号值为2(和刚刚的Seq原理同理),ACK序列号的值为2,以此来回复刚刚客户端刚刚发过来的Seq为1的这个报文。

TCP的滑动窗口

1.在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。

2.连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。

3.接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。

4.接收方根据自身的缓存空间大小通告当前的可以接受的数据大小(Window)。

5.发送方根据接收方当前的Window大小发送相应数量的数据。

UDP的报文格式

 UDP报文抓包分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值