传输层协议
目录
一、TCP协议介绍
TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。TCP是互联网中使用最广泛的协议之一,与IP协议一起构成TCP/IP协议族的基础。
二、TCP报文格式
源端口(Source Port) | 16 | 发送方使用的端口号,标识发送数据的应用程序。 |
目的端口(Destination Port) | 16 | 接收方使用的端口号,标识接收数据的应用程序。 |
序号(Sequence Number) | 32 | 数据流中的第一个字节的编号,用于确保数据按序到达。 |
确认号(Acknowledgment Number) | 32 | 对方需要确认的最后一个已接收字节的编号+1。 |
首部长度(Heade Length) | 4 | 表示TCP头部长度,以32位字(4字节)为单位。 |
保留(Reserved) | 6 | 必须为0,通常用于将来扩展。 |
控制位(Control Bit) | 8 | 包含多个控制位,如URG(紧急)、ACK(确认)、PSH(急切)、RST(重置)、SYN(同步)、FIN(断开)。 |
窗口大小(Window Size) | 16 | 接收方期望的下一报文段的最大长度。 |
校验和(Checksum) | 16 | 用于检测数据错误的校验和,覆盖头部和数据部分。 |
紧急指针(Urgent Pointer) | 16 | 如果设置了URG标志,则指出紧急数据的末尾。 |
这里我们讲一下控制位中的字母都代表什么意思
URG(紧急):当该位被置为1时,表示紧急指针有效。紧急指针字段指出紧急数据的末尾。
紧急数据通常用于通知接收方有需要立即处理的信息。
ACK(确认):当该位被置为1时,确认号字段有效。这意味着发送方已经收到了之前的数据,并且正在期待接收方的下一个序列号的数据。所有的连接建立、数据传输和连接终止都必须使用ACK标志
PSH(急切):当该位被置为1时,要求接收方立即将数据提交给上层应用程序,而不是等待缓冲区填满后再进行
RST(重置):当该位被置为1时,表示连接出现严重错误或者异常,需要重新初始化连接状态。
RST标志通常在网络故障、非法数据包或连接超时等情况下使用
SYN(同步):当该位被置为1时,表示这是一个连接请求或连接接受报文。在三次握手过程中,SYN标志用于同步序列号
FIN(断开):当该位被置为1时,表示发送方已经没有更多的数据要发送,希望关闭连接。
在四次挥手过程中,FIN标志用于结束数据传输
三、TCP三次握手
三次握手(Three-way Handshake)是一种通信协议,用于建立可靠的TCP连接。之所以被称为“三次握手”,是因为这个过程需要客户端和服务器之间交换三个数据包才能完成连接的建立???
当pc1想和pc2建立起连接
第一步 : pc1会发送一个 建立连接的请求报文 : 这个报文中有
1.报文的序号 (seq=x)
2.同步位(请求建立连接关系: SYN=1 )
第二步: 当pc2 收到消息以后回复一个报文
1.报文的序号 (seg=y)
2.ack确认号 ( 下一次发送 x+1 序号的报文 )
3.控制位 SYN=1 ACK=1?请求建立连接 pc2 同意建立连接
第三步: pc1收到 pc2 同意建立连接的报文后回复的内容
1.会发送一个x+1报文
2.希望下次发送y+1的序号报文
3.将ACK=1 封装进去 ?告诉对方同意并建立连接
四、四次挥手
四次挥手(Four-way Handshake)是TCP(Transmission Control Protocol)协议用于终止连接的过程。这个过程确保了双方都知道对方已经准备好关闭连接,防止数据丢失和资源浪费。
以下是四次挥手的详细步骤:
(一)主动关闭方发送FIN:
主动关闭方(通常是客户端或发起断开请求的一方)向被动关闭方(通常是服务器端或接收到断开请求的一方)发送一个FIN=1的报文段。这个报文段表明主动关闭方没有更多的数据要发送,并进入FIN-WAIT-1状态。
(二)被动关闭方回复ACK:被动关闭方接收到FIN报文段后,返回一个带有ACK=1的报文段,确认收到了主动关闭方的断开请求。此时,被动关闭方会将未完成的数据发送给主动关闭方,然后进入CLOSE-WAIT状态。
(三)被动关闭方发送FIN:当被动关闭方完成了所有数据的发送后,它也会向主动关闭方发送一个FIN=1的报文段,表示自己也准备好关闭连接。这时,被动关闭方进入LAST-ACK状态。
(四)主动关闭方回复ACK:主动关闭方接收到被动关闭方的FIN报文段后,返回一个带有ACK=1的报文段,确认收到了被动关闭方的断开请求。这时,主动关闭方进入TIME-WAIT状态,等待一段时间以确保最后一个ACK能够到达被动关闭方。
(五)被动关闭方关闭连接:被动关闭方接收到主动关闭方的ACK报文段后,可以安全地关闭连接。
(六)主动关闭方关闭连接:在TIME-WAIT状态等待一段时间后,如果主动关闭方没有收到任何数据包,则认为最后一个ACK已经成功送达,可以安全地关闭连接。
通过这个四次挥手的过程,TCP能够确保双方都已准备好关闭连接,避免了因一方错误关闭连接而引发的问题
有限状态机
-
CLOSED 没有任何连接状态
-
LISTEN 监听状态,等待来自远方TCP端口的连接请求?
-
SYN-SENT 在发送连接请求后,等待对方确认
-
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
-
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
-
FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
-
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
-
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
-
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
-
LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
-
CLOSING 双方同时尝试关闭传输连接,等待对方确认
五、UDP协议
UDP(User Datagram Protocol)用户数据报协议是一种无连接的传输层通信协议,它不保证数据包的顺序、可靠性和完整性。
简单快速:UDP没有复杂的握手和确认机制,数据包可以直接发送到目标主机。
无连接:在使用UDP之前,不需要建立连接。只需知道接收方的IP地址和端口号,就可以直接发送数据包。这也意味着当网络条件变化时,UDP无法自动调整发送速率或重新发送丢失的数据包。
不可靠:UDP不提供任何保证数据包到达目的地的机制。如果数据包在网络中丢失、损坏或延迟,UDP不会进行重传或修复。
UDP协议和TCP协议的区别
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!