TCP/IP 数据收发过程
数据包首部
数据包首部基本如上。每个分层中都会给数据添加一个首部。在首部中包括该层的一些必要信息,例如目标地址啊,发送地址啊 之类的。
而从下一层的角度来看的话,从上一层发过来的包(包括上一层附加的首部)全部被认定为上一层的数据。然后再附加一个 本层的首部。
首部就像是每一层的脸,定义了没一层的协议。
发送数据包
假设A给B发送电子邮件,内容为:“么么哒”。 从TCP/IP通讯上看,是从计算机A向计算机B发送电子邮件。我们通过这个例子通俗的讲解一下TCP/IP通讯的过程
应用层处理
在应用层,我们负责键入“么么哒”。然后负责编码,例如是用UTF-8呢还是其他的呢......
而发送的事情就不归它管了,应用在发送邮件的那一刻建立TCP连接,然后将数据交给下一层TCP模块进行处理。
传输(TCP)层的处理
TCP根据应用的指示,负责建立连接、发送数据以及断开连接。TCP负责将应用层发送过来的数据顺利发送到对端的可靠传输。
为了实现这个目标,就需要加一个TCP首部。在这个首部中包括,源端口号和目标端口号(端口号就是识别计算机上的应用的一个ID,例如QQ端口是1,LOL端口是2....)、序号(用来确定是包中的那一部分的数据的)、检验和(判断数据是不是传输中损坏)。然后把TCP首部加上去,发给IP层处理。
网络层(IP)层的处理
IP层,会在上一层数据的基础上加上自己的首部。
IP首部中包含,接收端IP地址,发送端IP地址。紧随IP首部的还有用来判断其后数据是用TCP(可靠传输)还是UDP(不可靠传输)的一个信息。
IP包生成后,参考路由表决定接受IP包的路由或者主机。随后,就是发送层层包装的数据了。
数据链路(以太驱动)层的处理
从IP层传来的数据,以太驱动会在这个基础上加上 以太首部。
以太首部包括接收端的MAC地址,发送端的MAC地址,以及以太网数据协议。根据以上信息,物理层就可以传输给接收端。
过程总结
包流动时,从前往后依次附加 以太网首部,IP首部,TCP首部,应用层首部,自己的数据,以太网尾部(最后追加)。
每个包首部中都至少包含2个信息:一个是发送端和接收端的地址,还有就是上一层的协议类型。
解包的时候,以太网会用MAC地址,IP会用IP地址,TCP(UDP)会用端口号 作为识别俩端主机的一个标识。
那么协议类型,就是表示的上一层到底用的是什么协议。例如是TCP呢还是UDP.......
数据接收过程
数据链路层
主机收到数据,首先从以太网包首部找到MAC地址判断是否为发给自己的包。如果不是就丢弃包。
如果是,就查找以太网首部中的类型域(就是下一层协议的类型)从而确定下一层该用什么去解析。如果是IP协议那么就把这个包交给处理IP协议的子进程去处理。如果是一个无法识别的协议就丢弃包。
下面那些也是做类似的处理。