TCP/IP通讯过程

1,551 阅读3分钟

数据包构成

数据包是由每一层的首部和从上一层接受到的包的信息所组成的,每一个首部都包含着该层的必要信息,如发送的目标地址和协议相关的信息。

数据包构成

数据单位

以下五个术语用于描述数据单位

  • 包:全能性述语
  • 帧:数据链路层中包的单位
  • 数据包:IP和UDP等网络层以上的分层中包的单位
  • 段:TCP中数据流的信息
  • 消息:应用协议中数据的单位

首部信息

首部信息

包流动的时候会从前往后依次附加以太包首部、IP包首部、TCP或者UDP首部以及传输层以上应用自己的包的首部信息。在最后也会添加一个包尾。

每个包里面至少包含两个信息:一个是接收端和发送端的信息,另一个是上一层的协议。

在经过每一层的时候都会分析接收端和发送段的信息,以太网会用MAC地址,IP会用IP地址,TCP/UDP会用端口号。

发送数据包

还是以发送邮件为例子(图解TCP这本书很喜欢发送邮件为例子),讲解一下数据包的流向过程。

传输层以上分层的处理

首先应用层就是点击发送邮件,表示层进行编码处理,而会话层则控制什么时候建立连接发送数据。

TCP模块处理

TCP根据会话层的指示建立起连接,为了实现与接受端的可靠传输,必须在上一层接收过来数据(应用层数据)前面添加一个首部信息。其中包括着源端口号、接收端端口号、序号(用以识别发送的包中哪部分是数据)和检验和(用于判断是否被损坏)。

IP模块处理

IP将TCP传输过来的TCP首部和TCP信息变成IP信息,并且在前面添加一个首部,因此IP首部后面紧随着TCP首部,之后才是数据本身。IP首部信息中包含着源IP地址,接收端的IP地址和后面协议类型(判断是否TCP或UDP)。

IP包生成以后会参考路由控制表后决定接受此IP包的主机,然后把IP包发送到连接这些路由的以太网驱动,实现真正得发送数据。

以太网驱动的处理

接受从IP层传过来的数据以后,像IP层一样进行添加首部处理,首部的信息里面包括源MAC地址,接收端的MAC地址和以太网协议类型。

接受数据包

包的接收就是一个逆转过程了。

以太网驱动处理

先判断MAC地址是否匹配,不匹配则丢掉。

如果匹配则判断以太网协议类型,如果是IP则交给IP模块处理,如果是其他协议如ARP协议,则交给ARP处理。如果遇到识别不了的协议,则丢掉。

IP模块的处理

接收到IP包首部和后面的数据以后,先分析IP地址是否匹配。如果匹配,则判断上一层协议类型,交给相关的协议处理(TCP或者UDP)。如果有路由器的情况下,IP是往往不匹配的,需要借助路由控制表进行转发处理。

TCP模块处理

首先计算校验和,判断是否损坏。然后判断是否按照序号接收数据,最后检查端口号,确定具体的应用。

如果接受完毕,接收端会发送一个确认给发送端。如果发送端没收到,会一直发送数据。

当数据接收完成后会传给相关端口号的应用。

传输层以上的处理

通过表示层的编译后会传输到应用层,如果应用层上没有相关的邮件地址,则会返回给发送端一个错误信息。如果硬盘超出负荷,也会报错。