传输层协议:TCP协议和UDP协议

传输层协议:TCP协议和UDP协议

  • TCP协议:传输控制协议
  • UDP协议:用户数据报协议

区别:

  • TCP:面向连接,稳定,慢

  • UDP:无连接,不稳定,快

一、TCP协议介绍(面向连接,稳定,慢)

  • TCP是面向连接的、可靠的进程到进程通信的协议(在传输真实数据之前先要进行连接测试(三次握手),如果测试通过才会发送真实数据,否则不会发送真实数据)
  • TCP提供全双工服务,即数据可在同一时间双向传输
  • TCP报文

​ ①、TCP将若干字节构成一个分组,叫报文段(Segment)

​ ②、TCP报文段封装在IP数据报中

1、TCP特性

1.1 工作在传输层

1.2 面向连接协议

1.3 全双工协议

1.4 半关闭

1.5 错误检查

1.6 将数据打包成段,排序

1.7 确认机制

1.8 数据恢复,重传

1.9 流量控制,滑动窗口

2、TCP报文格式

image-20231211161542642

1.1 端口号:区别应用程序(区别7层协议tcp/80(http)、tcp/443(https)、udp/69(tftp))

端口号范围:0~65535

  • 应用层:应用程序

  • 传输层:协议/端口号 tcp/80(80端口代表七层协议,http协议),协议要靠程序来实现(端口号不可以重复使用,一个端口号只能被一个程序占用)

1.2 序号:发送端为每个字节编号重组,便于接收端正确重组

1.3 确认号:用于确认发送端的信息(告诉对方我收到了你的消息,确认机制)

1.4 首部长度:IP头部,tcp头部(确定首部数据结构的字节长度)

1.5 控制位:描述了AB两台设备目前处于什么状态

tcp协议先要建立连接

A —————》 B

①、没有建立连接

②、已建立连接

③、断开连接

  • URG(紧急位):表示本报文段中发送的数据是否包含紧急数据。
  • ACK(确认位):表示前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。
  • PSH(急切位):提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
  • RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接
  • SYN(同步位):在建立连接时使用,用来同步序号
  • FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕

1.6 滑动窗口(窗口大小):调节每次发送的数据包量

1.7 校验和:提供额外的可靠性紧急指针,标记紧急数据在数据字段中的位置

3、TCP三次握手

网络环境复杂,为了确保数据能够到达,两次不够,四次多余,三次正好

image-20231211161509035

当pc1想和pc2建立起连接 将连接信息写入报文

第一步 :pc1会发送一个建立连接的请求报文,报文包括:

①、报文的序号(seq=x)

②、同步位(请求建立连接关系: SYN=1 ACK=0 控制位:当前两台设备处于什么状态? 建立连接、处于连接、断开连接 )

第二步:当pc2收到消息以后,要回复一个报文

①、报文的序号(seq=y)

②、ack确认号( 我希望你下一次发送x+1序号的报文给我)

③、控制位SYN=1,ACK=1请求建立连接,pc2同意建立连接

第三步:收到 pc2 同意建立连接的报文后

1.会发送一个x+1报文

2.会告诉对方我希望你下次发送y+1的序号报文给我

3.最后将ACK=1 封装进去,告诉你收到了你的同意请求并且我也统一和你建立连接

4、TCP四次挥手

image-20231211162036739

①、主动关闭方发送FIN:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT_1 状态。

–即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。

②、被动关闭方回复ACK:服务端收到 FIN 之后,会发送 ACK =1报文,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。
–即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT_2(终止等待2)状态,等待服务端发出的连接释放报文段。

③、被动关闭方发送FIN:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
–即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。

④、主动关闭方回复ACK,关闭连接:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
–即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。
有限状态机:

  1. closed:断开,没有任何连接状态 (客户端,服务端都有)
  2. listen:监听状态,等待来自远方TCP端口的连接请求(服务开启http(进程)80端口在帮进程看着有没有人找http)
  3. syn-sent:发送。在发送连接请求后,等待对方确认(客户端)
  4. syn-received:在收到和发送一个连接请求后,等待对方确认(服务端)
  5. established:代表传输连接建立,双方进入数据传送状态(客户端,服务端都有)
  6. fin-wait-1:主动关闭,主机已发送关闭连接请求,等待对方确认
  7. fin-wait-2:主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
  8. time-wait:完成双向传输连接关闭,等待所有分组消失
  9. close-wait:被动关闭,收到对方发来的关闭连接请求,并已确认
  10. last-ack:被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
  11. closing:双方同时尝试关闭传输连接,等待对方确认

客户端先发送一个FIN给服务端,自己进入FIN_WAIT_1状态,这时等待接收服务端报文,该报文会有三种可能:

  • 只有服务端的ACK
  • 只有服务端的FIN
  • 基于服务端的ACK,又有FIN
5、常用的TCP端口号及其功能
端口 协议 说明
21 FTP FTP服务器所开放的控制端口
23 TELNET 用于远程登录,可以远程控制管理目标计算机
25 SMTP SMTP服务器开放的端口,用于发送邮件
80 HTTP 超文本传输协议
110 POP3 用于邮件的接收

二、UDP协议介绍(无连接,不稳定,快)

1、UDP协议
  • 工作在传输层
  • 提供不可搞得网络访问
  • 无连接
  • 有限的错误检查
  • 传输性能快
  • 无数据恢复特性

image-20231211173521949

telnet协议:明文传输,远程管理协议。探测远端服务器的端口是否打开

命令: telnet IP地址 端口号:服务软件是否正常

2、常用的UDP端口号及其功能
端口 协议 说明
69 TFTP 简单文件传输协议
111 RPC 远程过程调用
123 NTP 网络时间协议

猜你喜欢

转载自blog.csdn.net/2301_81272194/article/details/134932756