有次服务器宕机,找了很久只发现TCP上千的连接数,所以想仔细看看TCP是啥,下次遇到类似的问题好对症下药。本篇博客参考了TCP协议详解

TCP的由来

随着互联网的发展,需要一套公认的底层协议,用于不同计算机的底层数据传输。就像国际贸易通常用美元,美元就类比这里的TCP。

TCP是什么

专业的讲,TCP是TCP/IP协议中的一个协议。TCP/IP协议是一个协议族的统称。其中包括IP协议、IMCP协议、TCP协议以及HTTP、FTP、POP3等协议。图示如下

应用层

提供应用程序。比如电子邮箱(常用pop3、imap、smtp、exchange等协议)、远程连接软件SecureCRT(Telnet协议,ssh)、文件传输软件(ftp协议)。应用层可以理解为一个壳、一个转换工具。把底层协议封装得可用。就像写信的时候,应用层可以理解为笔纸字。

传输层

提供应用层的通讯。其功能包括:

  • 格式化信息流
  • 提供可靠传输

为了实现后者,接收端必须发送回执。假如消息丢失,必须重新发送。

网络层

从这里开始不是特别懂了

负责相邻计算机的通信。功能包括:

  • 处理传输层的分组发送请求(什么叫分组发送请求?),收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。

  • 处理输入数据报,首先检查其合法性,然后寻址。

    • 如果数据报已到达了信宿机,则去掉报头,将报文交给适当的传输协议
    • 如果数据报未到达信宿机,选择去路径,转发数据报。
  • 处理路径、流控、拥塞等问题。

网络接口层

这是TCP/IP软件的最底层。

  • 负责接收IP数据报,并通过网络发送。

  • 从网络上接收物理帧,抽出IP数据报,交给IP层。

IP是无连接的

IP用于计算机之间的通信。

IP是无连接协议,也就是说IP不会占用通道。就像公路上的普通车道,所有车都可以通行;但公交专用道就只能公交车通行,公交车占用了公交专用道。

通过IP,数据被分为多个小包,通过因特网在计算机之前传输。

IP负责将小包路由到指定目的地。

IP地址

计算机必须有个IP地址才能接入因特网。

IP包必须有IP地址才能发送到另一台计算机。

现在最常用的是IPv4标准。即IP地址是32bit的数字,这个数字被分成四组,每组8bit,取值为0~255共2^8=256个数。所以现在世界上一共有2^32=2^102^102^10*4≈40亿个IPv4地址,已经不够用了,所以渐渐开始用IPv6标准。

TCP是有连接的

TCP用于应用程序之间的通信。

TCP与另一个程序通信的时候,会先发送一个连接请求。当双方“握手”后,TCP会建立全双工(full-duplex)的通信。

UPD与TCP相似,但比TCP更简单,同时也更不可靠。

IP路由器

IP路由器负责将IP包路由到它的目的地,直接或间接地通过其他路由器。

一次相同的通信中,路由的路径可能不同。路由器通过网络中的错误、通信量、或其他参数正确寻址。

域名

域名会被DNS服务器翻译为具体IP地址。DNS不仅负责将域名翻译为TCP/IP地址,还负责将新的域名更新到彼此的DNS服务器。

TCP/IP

TCP负责应用层的通信;IP负责计算机之间的通信。

TCP将数据拆分成IP包,并在他们到达的时候重新组合;IP负责传输这些包。

TCP报文格式

TCP报文格式

16位源端口号

源端口表示数据从源IP哪个端口请求。因为端口号为0~65535,共2^16=65536个数。源IP和端口的作用是提供报文的返回地址。

16位目的端口

目的端口表明请求到目的IP的端口。

32位位序号

由接收端计算机使用。重新分段的报文成最初形式。当SYN出现时,序列码是初始序列码,而第一个数据字节是ISN+1。这个序列码可以补偿传输中的不一致。

32位确认序号

由接收端计算机使用。重组分段的报文成最初形式。如果设置了ACK控制位,这个值表示一个准备接受的包的序列码。

4位首部长度

包括TCP头大小,指示数据开始位置。

6位保留

保留值,必须是0。为了将来的新用途保留。

6位标志域

包括紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志,分别对应URG、ACK、PSH、RST、SYN、FIN。

URG

紧急标志。标志为“1”时有效。

ACK

确认标志。表示确认序号有效。大多数情况下该标志位是置位的。确认序号为为下一个预期的序号,同时提示远端已成功接收数据。

PSH

推标志。当该标志置位时,接收端不将该数据放入处理队列,而是尽快的将该数据转为应用处理。当处理Telnet、rlogin等连接时,该标志总是置位的。

RST

复位标志。用于复位相应的TCP连接。

SYN

同步标志。表明同步序列编号栏有效。该标志仅在三次握手,建立TCP连接时有效。

FIN

结束标志。

TCP报文格式

16位窗口大小

表示想要接收的每个数据段的大小。窗口大小是字节数,起始于确认序号。窗口最大65535字节。

16位校验和

由发送端基于数据计算的一个值,由接收端校验。

16位紧急指针

指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG没有被设置,紧急域作为填充。加快处理标志为紧急的数据段。

选项

长度不定,但数据必须为1字节。如果没有选项就表示这个选项的域为0。

数据

TCP包负载的数据。