计算机网络笔记:用户数据报协议UDP和传输控制协议TCP报文首部格式

用户数据报UDP的首部格式

UDP的两个字段:首部字段和数据字段。

UDP的首部字段:很简单,只有8个字节。由四个字段组成,每个字段都是2个字节。

  • 源端口:源端口号。需要对方回信时使用,不需要时可以填全零。
  • 目的端口:目的端口号,这在终点交付报文时必须使用。
    • 目的端口不正确情况: 如果接收方UDP发现收到的报文中目的端口号不正确(不存在对应于该端口的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。
  • 长度:UDP用户数据报的长度,其最小值为8(只有首部的情况)。
  • 检验和:检测UDP用户数据报在传输过程中是否出错,有错则丢弃。
    • 伪首部的概念: 在计算检验和时,需要在UDP用户数据报之前加入12个字节的伪首部。这个伪首部并非UDP用户数据报真正的首部,只是在计算检验和时临时添加的,得到一个临时UDP用户数据报。
    • 伪首部的组成:前4个字节为源IP地址,后面4个字节为目的IP地址,下一个字节为0,再下一个字节为17(表示协议类型为UDP),最后两个字节为UDP长度。
    • 检验和计算方法:UDP把首部和数据部分一起做检验。
    • 检验方法评价:这种检验方法的检错能力并不强,但是很简单,处理起来非常快。

TCP报文段的首部格式

TCP首部的组成:TCP报文段首部前20个字节是固定的,后面4n个字节是根据需要而增加的选项。因此TCP首部的最小长度是20字节。

  • 源端口和目的端口:各占两个字节,分别写入源端口号和目的端口号。
  • 报文段序号:占用四个字节。序号增加到最大值后又从零开始。TCP连接中的每一个字节都按顺序编号,整个要传送的字节流的起始序号都在建立连接时设置。首部中的序号字段是本报文所要发送数据的第一个字节的序号。
  • 确认号:占用四个字节,是期望收到对方下一个报文段的第一个数据字节的序号。确认号为N表示到序号N-1为止的所有数据都已经收到。
  • 数据偏移:占用一个字节。该字段指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,实际上就是指出了TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段很有必要。数据偏移字段中的单位一表示4个字节,因此TCP首部的最大长度是60字节。
  • 保留:占6位。目前没有特殊用途,置为全零。

下面的六个都是控制位,用来说明当前报文的性质:

  • 紧急URG
    • 当URG为1时表示紧急指针字段有效。
    • 它说明此报文中包含紧急数据,需要尽快传送(相当于有更高的优先级),而不需要按照排队顺序传送。发送方TCP会把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍然是普通数据。
    • 紧急URP字段需要配合紧急指针进行使用。
  • 确认ACK:仅当ACK字段为1时确认号字段才有效。TCP规定在建立连接之后所有传送的报文段必须把ACK置为1。
  • 推送PSH:当一个应用进程希望键入一个命令后立即收到对方的响应,就可以使用推送操作。将PSH字段设置为1,表示接收方尽快交付应用进程,而非等到整个缓存都满了才进行交付。
  • 复位RST:当该字段置为1表示TCP连接中出现了严重差错,必须释放连接然后重新建立运输连接。
  • 同步SYN:在建立连接时用于同步序号。当SYN=1且ACK=0时,表示这是一个连接请求报文段;当SYN=1且ACK=1时,表示这是一个同意建立连接的响应报文段。
  • 终止FIN:当该字段为1表示释放一个连接。
  • 窗口:占两个字节。窗口指的是本报文段的一方的接收窗口。告诉对方:从本报文首部的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以有这个限制,是因为接收方的数据缓存空间有限。窗口值一直在动态变化。
  • 检验和:占两个字节。
    • 伪首部:和UDP一样,在计算检验和时,需要在TCP报文段之前加上一个12字节的伪首部。与UDP相比,需要把第4个字段中的17修改为6(TCP的协议号),把第五个字段的UDP长度改为TCP长度。
  • 紧急指针:占2字节。只有在URP=1时有意义,指出了本报文段中的紧急数据的字节数,也就是指出了紧急数据的末尾在报文段中的位置。

猜你喜欢

转载自blog.csdn.net/hanmo22357/article/details/131315162
今日推荐