传输层协议介绍

322 阅读8分钟

传输层协议介绍.png


回顾

TCP和UDP区别
  • TCP(传输控制协议):可靠,接不到可以重新传,速度慢
  • UDP(用户数据报协议):不可靠,接不到不会重新传输,速度快

TCP协议介绍

  • TCP是面向连接的、可靠的进程到进程通信的协议。
  • 在真正传输数据之前,要打通传输数据的通道,A和B先建立连接。
  • TCP是全双工服务,即数据可在同一时间双向传输。
TCP特性
  1. 工作在传输层
  2. 面向连接协议
  3. 全双工协议
  4. 半关闭
  5. 错误检查
  6. 将数据打包成段,排序
  7. 确认机制
  8. 数据恢复,重传
  9. 流量控制,滑动窗口

TCP报文格式

端口号

系统当中每打开一个进程,会分配pid(系统中的编号,方便管理),其次会分配一个端口号。
端口号作用:确定进程
端口号分类

  1. 规定好的,知名端口号。(80、443人为规定)
  2. 系统随机规定(客户端访问服务端,系统会自动随机分配一个端口号)
  3. 人类自由使用
各字段详解

TCP报文段.png

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即 65536(0-65535)(端口的作用就是用来唯一标识这个进程,源端口号是这个包是从哪里来,目的端口号是这个包要去哪里)
序列号(seq):表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。
确认号(ack):表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。(告诉发送方,希望发送方下次发送的数据的第一个字节数据的编号是此确认号,确定传输是否有问题。)
数据偏移/首部长度:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。(TCP报文的长度)
控制位:来决定A和B目前处于什么状态,一共11种状态。(双方处于什么状态,由控制位来决定。)

  • URG(紧急位):表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段只有当URG=1时才有效。(URG为1,紧急指针才有效)
  • ACK(确认位):表示前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的 TCP报文段称为确认报文段。(ACK=1,A已经和B建立连接
  • PSH(急切位):提示接收端应用程序应该立即从 TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中。(优先级,急切的数据先走)
  • RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段。(与主机连接出问题或发给主机的数据有问题,需重新建立连接)
  • SYN(同步位):在建立连接时使用,用来同步序号。
    当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段。(SYN=1,A想和B建立连接
  • FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即数据已经发送完毕,可以释放连接了。带FIN标志的TCP报文段称为结束报文段。(数据发送好,可以释放连接。FIN=1,A和B断开连接

窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据。
校验和:提供额外的可靠性紧急指针,标记紧急数据在数据字段中的位置

11种状态
状态详解
CLOSED没有任何连接状态
LISTEN侦听状态,等待来自远方TCP端口的连接请求
SYN-SENT在发送连接请求后,等待对方确认
SYN-RECEIVED在收到和发送一个连接请求后,等待对方确认
ESTABLISHED代表传输连接建立,双方进入数据传送状态
FIN-WAIT-1主动关闭,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIME-WAIT完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT被动关闭,收到对方发来的关闭连接请求,并已确认
LAST-ACK被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
CLOSING双方同时尝试关闭传输连接,等待对方确认
常见的端口号及其功能
端口协议说明
21FTPFTP服务器所开发的控制端口
23TELENT用于远程登录,可远程控制管理目标计算机
80HTTP超文本传输协议

TCP三次握手

三次握手过程

三次握手.png

当PC1想和PC2建立起连接,将连接信息写入报文。

  • 1.PC1会发送一个建立连接的请求报文:
    1. 报文的序号(seq=x
    2. 同步位(SYN=1
  • 2.当PC2收到消息后需要回复一个报文:
    1. 报文的序号(seq=y
    2. ack确认号(希望对方下一次发送x+1序号的报文给自己,ack=x+1
    3. 控制位SYN=1,ACK=1,PC2同意建立连接
  • 3.收到PC2同意建立连接的报文后:
    1. 会发送一个x+1报文(seq=x+1
    2. 会告诉对方希望下次发送y+1的序号报文给我(ack=y+1
    3. 最后将ACK=1封装进去
为什么是三次握手

三次握手的过程是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的过程。 为了实现可靠数据传输,TCP协议的通信双方,都必须维护一个序列号,来标识发送出去的数据包中,哪些是已经被对方收到的。
如果只是两次握手,最多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认。

TCP四次挥手

四次挥手过程

四次挥手.png

  • PC1向PC2发送请求断开连接的报文:
    1. 报文的序号(seq=u)
    2. 请求断开连接(FIN=1)
    3. 目前仍处于连接状态(ACK=1)
  • PC2收到请求后回复一个报文:
    1. 报文的序号(seq=v)
    2. ack确认号(ack=u+1)
    3. 仍在连接状态,收到了请求(ACK=1)
  • 此时处于半关闭状态,PC2处理未完成数据
  • 当PC2处理完数据想断开连接,给PC1发送一个报文:
    1. 报文的序号(seq=w)
    2. ack确认号(希望下一次回复u+1序号的报文,ack=u+1)
    3. 想要断开连接(FIN=1)
    4. 仍在连接状态,收到报文(ACK=1)
  • 收到PC2想要断开连接的报文后:
    1. 会发送一个u+1报文(seq=u+1)
    2. ack确认号(ack=w+1)
    3. 仍在连接状态,收到确认断开连接(ACK=1)

UDP协议介绍

  • 无连接、不可靠的传输协议
  • 花费的开销小
UDP报文首部格式

UDP报文.png

UDP长度:用来指出UDP报文总长度,首部加上数据。
校验和:用来完成对UDP数据的差错校验。
常用的UDP端口号:
TFTP(端口号:69):简单文件传输协议 RPC(端口号:111):远程过程调用


总结

TCP报文六个控制位:URG(紧急位)、ACK(确认位)、PSH(急切位)、RST(重置位)、SYN(同步位)、FIN(断开位)
TCP三次握手过程

三次握手(简).png