传输层协议


前言

一、TCP报文的格式

在这里插入图片描述

1.源端口:占16位,发送方的端口号。

2.目的端口:占16位,接收方的端口号。

3.序列号:占32位,用于标识从发送方发送的数据字节流中的字节序列号。

4.确认号:占32位,当TCP报文段带有ACK标志时,此字段有效,表示期望收到的下一个字节的序列号。

5.数据偏移:占4位,指示TCP头部的长度,以32位字为单位。

6.保留:占6位,保留供将来使用,当前必须置为0。

7.控制位:占6位,包含TCP报文的各种控制标志:
URG:紧急指针有效。
ACK:确认号有效。
PSH:接收方应该尽快将这个报文段交给应用层。
RST:重置连接。
SYN:同步序列编号,用于建立连接。
FIN:结束一个方向的连接。

8.窗口大小:占16位,用于流量控制,指定接收方的接收窗口大小。

9.校验和:占16位,用于错误检测。

10.紧急指针:占16位,当URG控制位被设置时,此字段有效,指示紧急数据的结束位置。

11.选项:长度可变,用于设置TCP的各种参数,如最大报文段大小、窗口缩放因子、选择确认协商等。

12.填充:确保TCP头部是32位字的整数倍。

二、TCP的三次握手

TCP(传输控制协议)建立连接的过程称为三次握手,这是TCP/IP协议的核心特性之一,确保了双方在数据传输前都准备好了。以下是三次握手的详细过程:

第一次握手:SYN
客户端发送SYN:客户端选择一个初始序列号并将其放入序列号字段,设置SYN标志位为1,表示希望建立连接,并将此报文发送给服务器。例如,客户端发送一个SYN报文,序列号(seq)为x。

第二次握手:SYN-ACK
服务器响应SYN-ACK:服务器接收到客户端的SYN报文后,如果同意建立连接,则会分配TCP资源并发送一个SYN-ACK报文。服务器也选择一个初始序列号,并在确认号(ACK)字段中填入客户端的序列号加1(x+1),设置SYN和ACK标志位为1。例如,服务器发送一个SYN-ACK报文,序列号为y,确认号为x+1。

第三次握手:ACK
客户端发送ACK:客户端接收到服务器的SYN-ACK报文后,检查ACK是否等于客户端的初始序列号加1。如果确认无误,客户端会发送一个ACK报文,确认号设置为服务器的序列号加1(y+1),SYN标志位为0,ACK标志位为1。例如,客户端发送一个ACK报文,序列号为x+1,确认号为y+1。
连接建立完成
一旦服务器接收到客户端的ACK报文,确认连接已经建立,双方就可以开始数据传输了。


为什么需要三次握手?

三次握手的主要目的是同步连接双方的初始序列号,防止失效的连接请求报文段突然又传送到了服务器,因而产生错误。具体来说:

第一次握手:客户端告诉服务器,我想要建立连接,并发送自己的初始序列号。
第二次握手:服务器告诉客户端,我同意你的连接请求,并发送自己的初始序列号。
第三次握手:客户端确认服务器的序列号,同时告诉服务器自己的序列号有效。
通过这个流程,双方都知道对方已经准备好进行数据传输,且序列号已经同步。这确保了TCP连接的可靠性。

附加说明
序列号:用于标识从发送方发送的数据字节流中的字节序列号,确保数据包的顺序和完整性。
确认号:当TCP报文段带有ACK标志时,此字段有效,表示期望收到的下一个字节的序列号。
SYN:同步序列编号,用于建立连接。
ACK:确认号有效,表示接收方已经成功接收了发送方的数据。


三、TCP的四次挥手

TCP四次挥手是TCP连接终止过程中的步骤,它确保了双方都能独立地关闭连接。以下是TCP四次挥手的详细过程:

第一次挥手:FIN
主动关闭方发送FIN:当主动关闭方(可以是客户端或服务器)决定关闭连接时,它设置FIN标志位为1,并生成一个序列号,发送FIN报文。这表示主动关闭方已经完成发送数据。

第二次挥手:ACK
被动关闭方发送ACK:被动关闭方接收到FIN报文后,发送一个ACK报文作为回应,确认号为接收到的序列号加1。此时,被动关闭方已经知道对方要关闭连接了,但是被动关闭方可能还有未发送完的数据。

第三次挥手:FIN
被动关闭方发送FIN:当被动关闭方也完成数据发送后,它会发送一个FIN报文,请求关闭其到主动关闭方的连接。

第四次挥手:ACK
主动关闭方发送ACK:主动关闭方接收到这个FIN报文后,发送一个ACK报文作为回应,确认这次关闭请求。
连接关闭完成
至此,TCP连接被完全关闭。双方的连接关闭是独立的,因此需要两个FIN和两个ACK报文。


为什么需要四次挥手?

确保数据传输完成:四次挥手确保双方在关闭连接前都已经完成数据的发送和接收。
防止已失效的连接请求干扰:与三次握手类似,它防止了旧的连接请求干扰新的连接。
顺序关闭:允许双方独立关闭连接,而不是同时关闭。
附加说明
FIN:表示发送方已经完成发送数据,请求关闭连接。
ACK:确认号有效,表示接收方已经成功接收了发送方的FIN请求。
序列号和确认号:在挥手过程中,序列号和确认号依然起着重要的作用,确保TCP报文的正确性和顺序性。

四次挥手过程是TCP连接终止的标准流程,它确保了TCP连接的可靠性和数据传输的完整性。在某些情况下,如果被动关闭方在接收到FIN后立即发送自己的FIN,这个过程可以被压缩为三次挥手,但标准的TCP关闭过程是四次挥手。

四、常见的TCP端口号

21: ftp–文件传输协议(FTP)端口
22: ssh–安全 Shell(SSH)服务
23: telnet–Telnet 服务
25: smtp–简单邮件传输协议(SMTP)
53:dns–域名服务
80: http–超文本传输协议
110: pop3–邮局协议版本3
443: https–安全超文本传输协议
3306:mysql数据库

五、常见的UDP端口号

123: NTP–网络时间协议
67: DHCP–动态主机配置协议
161: SNMP–简单网络管理协议
69: TFTP–简单文件传输协议
111: RPC–远程调用协议

六、TCP与UDP的不同

连接性:
TCP:面向连接的协议,数据传输前需要建立连接,通过三次握手过程。
UDP:无连接的协议,数据传输前不需要建立连接,发送数据时直接发送。

数据完整性:
TCP:提供数据完整性保证,通过序列号和确认应答机制确保数据包正确传输。
UDP:不保证数据完整性,不使用序列号和确认机制,可能发生数据丢失或乱序。

拥塞控制:
TCP:具有拥塞控制机制,可以根据网络状况调整数据传输速率。
UDP:没有拥塞控制,发送速率固定,可能在网络拥堵时导致丢包。

流量控制:
TCP:具有流量控制机制,通过滑动窗口协议调整接收方的接收能力。
UDP:没有流量控制,接收方必须接收所有发送的数据。

错误恢复:
TCP:具有错误恢复机制,如超时重传、选择性应答等。
UDP:没有错误恢复机制,不处理数据包的重传。

报文结构:
TCP:有复杂的头部结构,包括序列号、确认号、窗口大小等字段。
UDP:头部结构相对简单,主要包含源端口、目的端口、长度和校验和。

传输速度:
TCP:由于需要建立连接和保证数据完整性,传输速度相对较慢。
UDP:传输速度快,适合实时应用,如语音和视频通信。

用途:
TCP:适用于需要可靠传输的应用,如Web浏览、文件传输、邮件传输(SMTP)等。
UDP:适用于对实时性要求高的应用,如实时视频会议、在线游戏、DNS查询等。

编程复杂性:
TCP:编程模型相对复杂,需要处理连接的建立、维护和终止。
UDP:编程模型简单,只需发送和接收数据报。

安全性:
TCP:本身不提供安全性,但可以通过SSL/TLS等协议实现加密通信。
UDP:同样不提供安全性,需要应用程序实现加密和认证机制。


选择UDP还是TCP取决于具体的应用需求,如果需要可靠、有序的数据传输,TCP是更好的选择;如果需要快速、简单的数据传输,UDP可能更合适。

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值