网络协议 -- TCP协议(1)特性及协议首部

一、TCP特性

尽管TCP和UDP都是用IP协议作为网络层,但TCP却提供和UDP完全不同的网络服务。TCP是面向连接的稳定可靠字节流服务。TCP首部的很多字段都是为了实现这2大特性而设计的。

在一个TCP连接中,仅有两方能进行彼此通信。所以说广播和多播不适用于TCP协议。

为了通过IP数据报实现可靠性传输,需要考虑很多事情,如数据的破坏、丢包、重复以及分片顺序混乱等问题。TCP通过检验和、序列号、确认序列号、重发控制、连接管理以及窗口控制等机制来实现可靠性传输。

二、TCP协议首部

摘自《TCP/IP详解卷1》中的关于TCP首部定义的图:
网络协议 -- TCP协议(1)特性及协议首部_第1张图片

TCP协议的实现较UDP协议复杂太多,它的首部的各个字段的用法也比UDP首部字段复杂多,这里先对TCP首部字段的功能做个大概的介绍。

  • 16位源端口号:表示发送端端口号。传输层使用端口号来标识发送端和接收端的应用程序,而网络层是通过IP地址来标识主机,这样使用“IP地址+端口”就可以精确定位到某一台主机上的某一应用程序。
  • 16位目的端口号:表示接收端端口号。
  • 32位序列号:序列号用来标识从TCP发送端已经发送的字节数。达到最大值 2321 2 32 − 1 之后,再从0开始。
  • 32位确认序列号:确认序列号用来标识TCP接收端期望接收的下一个序列号(反过来想也就是,TCP接收端已经接受到的字节数为确认序列号减去1)。只有ACK标志位为1时,该字段才有效。只要TCP连接建立,这个字段会一直起作用,也就是说只要TCP连接建立,ACK标志位会一直为1。
  • 4位首部长度:和IP首部一样,是以4个字节(32 bit)为单位的,所以TCP首部最大长度也是15*4=60字节。若没有“选项”字段,长度固定为20字节。
  • 6位标志位:他们中的多个可以同时被设置为1。
URG 标记后面的"16位紧急指针"是否有效。
ACK 标记前面的"32位确认序号"是否有效。
PSH 接收方应该尽快的将这个报文交给上层的网络层。
RST 重建连接。
SYN 标记这个TCP段是用来同步初始序号(ISN)的。
FIN 标记发送端已经完成了发送任务。
  • 16位窗口大小:窗口大小为字节数,用于TCP的流量控制,这个值是接收端期望接受的字节数。
  • 16位校验和:和UDP类似,校验和覆盖首部和数据部分。
  • 16位紧急指针:只有前面提到的URG标记位为1时,这个字段才有效。
  • 选项:添加一些附加数据。和UDP不同,TCP的“选项”字段使用的比较多。

《TCP/IP详解 卷1:协议》在线阅读地址:http://www.52im.net/topic-tcpipvol1.html

你可能感兴趣的:(☆,网络编程,网络协议)