TCP协议
传输控制协议(Transmission Control Protocol),位于TCP/IP模型的传输层,它是一种面向连接的,基于字节流的端到端协议,可以为主机提供可靠的数据传输。
TCP报文格式
- 源IP与端口,目的IP与端口,协议。五元组一致则唯一确定一个TCP连接;
- 32位序列号,用来标识从发送端到接收端发送的字节流,对每个字节进行计数,达到2^32-1后重新开始计数。在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,没发送一次数据,就累加一个该数据字节数的大小。用来解决网络包乱序问题;
- 32位确认序列号,指下一次期望收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题;
- 4位首部长度:是指TCP数据起始位置距离TCP报文起始位置的距离,一般情况下为报文首部长度20字节,最大为60字节;
- 6位控制位。ACK:该位为1时,确认应答的字段变为有效,TCP规定了除了最初建立连接时的SYN包之外,该位必须设置为1。RST:该位为1时,表示TCP连接中出现异常必须强制断开连接。SYN:该位为1时,表示希望建立连接,并在其序列号的字段进行初始值的设定;FIN:该位为1时,表示希望断开连接。 URG:该位为1时,表示该报文是紧急报文,因此发送方会将该报文放在最开头传输,要配合TCP首部紧急指针一起用。PSH:该位为1时,希望对方立即接收。
- 16位窗口大小,指自己的接收窗口,不是发送窗口,告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值作为接收方让发送方设置其发送窗口的依据。一般用来平衡双发的数据传输效率(带宽)不一致问题。接收窗口最大是2^16=65535字节。如果为0,代表接收方的缓存区已满。
- 最大分片大小MSS(Maximum Segment Size),是客户端和服务端在TCP三次握手的前2个包协商确定的。
- 窗口缩放比例因子(Windows Scale),是客户端和服务端在TCP三次握手时协商确定的,并在连接期间使用,实际窗口大小=windows size * 2^scale。如果一侧不支持缩放,则任何一方都不会使用此功能。
- 16位校验和:校验整个TCP报文段(TCP报文头+数据部分),该值由发送端计算和记录并由接收端进行验证。
TCP建立连接
TCP是一种可靠的,面向连接的全双工传输层协议。TCP连接的建立是一个三次握手的过程,如图所示:
- 主机A(客户端)发送一个标识了SYN的数据段,表示期望与服务器A建立连接,此数据段的序列号(seq)为a;
- 服务器A回复标识了SYN+ACK的数据段,此数据段的序列号(seq)为b,确认序列号为主机A的序列号加1(a+1),以此作为对主机A的SYN报文的确认;
- 主机A发送一个标识了ACK的数据段,此数据段的序列号(seq)为a+1,确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文的确认。
TCP传输过程
TCP使用了确认技术来确保目的设备收到了从源设备发来的数据,原理如下:
目的设备接收到源设备发送的数据段时,会向源端发送确认报文,源设备收到确认报文后,继续发送数据段,如此重复。
主机A向服务器A发送TCP数据段,为描述方便假定每个数据段的长度都是500个字节。当服务器A成功收到序列号是M+1499的字节以及之前的所有字节时,会以序列号M+1499+1=M+1500进行确认。另外,由于数据段N+3传输失败,所以服务器A未能收到序列号M+1500字节,因此服务器A还会再次以序列号M+1500进行确认。
超时重传:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重新发片。
TCP流量控制
流量控制是作用于接受者的,它是控制发送者的发送速度从而使接受者能及时接收,防止分组丢失,主要使用滑动窗口。
TCP拥塞控制
拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况。
常用的方式是:1,慢开始、拥塞避免;2,快重传、快恢复。
TCP关闭连接
主机在关闭i连接之前,要确认收到来自对方的ACK。
TCP支持全双工模式传输数据,意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接都必须关闭。
实验环境
R1:
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sysname R1 //改名
[R1]int g0/0/0 //进入0/0/0端口
[R1-GigabitEthernet0/0/0]ip add 192.168.10.1 24 //设置ip
R2:
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sysname R2 //改名
[R1]int g0/0/0 //进入0/0/0端口
[R1-GigabitEthernet0/0/0]ip add 192.168.10.2 24 //设置ip
[R2]aaa
[R2-aaa]local-user telnet password cipher huawei //telnet登录用户名为telnet、密文密码:huawei
[R2-aaa]local-user telnet privilege level 3 //给这个用户的级别为3
[R2-aaa]local-user telnet service-type telnet //为telnet这个用户开启telnet服务
[R2-aaa]q //退出
[R2]user-interface vty 0 4 //设置远程登陆数量
[R2-ui-vty0-4]authentication-mode aaa //选择aaa认证的模式
[R2-ui-vty0-4]q
开启wireshark抓包,在R1上远程R2:
telnet 192.168.10.2 //连接
Username:telnet //账号
Password: huawei //密码
抓包分析
一个TCP流,对应的就是一个五元组:传输协议类型、源IP、源端口、目的IP、目的端口。
标签:协议,R2,流量,发送,telnet,TCP,序列号,连接 From: https://www.cnblogs.com/wlhk/p/17189600.html