图解TCP/IP(四)——TCP通信之发送数据基本点

来源:互联网 发布:手机蟑螂软件 编辑:程序博客网 时间:2024/06/05 20:16

前言

上一篇笔记中分析了TCP/IP分层模型与OSI7层模型的对应关系,下面介绍一下数据传递过程中,各层对数据的操作。

1、TCP/IP分层模型与通信示例

如上图所示,每个分层中,都会对所 发送的数据附加一个首部,这个首部中,通常包含了当前层的必要信息。
在此之前,必须先介绍几个表示数据单位的基本概念。
  • 包:全能性术语,泛指数据分组传递中的组的单位。
  • 帧:用于标识数据链路层中包的单位。
  • 数据报:IP和UDP等网络层以上分层中包的单位。
  • 段:表示TCP数据流中的信息。
  • 消息:应用协议中数据的单位。
网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上层传过来的数据。首部的结构
由协议的具体规范详细定义。如,识别上一层协议的域应该从包的哪一位开始读取多少个比特、如何计算校验和并插
入包的哪一位等。相互通信的两端计算机如果在识别协议的序号及校验和的计算方法上不一样,就根本无法实现通信。
因此,子啊数据包的首部,明确表明了“协议应该如何读取数据。”,反过来说,看到首部,也就能够了解协议
必要的信息。及所要处理的内容。因此,看到包首部就如同看到了协议规范。

2、发送数据包

应用场景:假设甲给乙发送电子邮件,内容为“早上好”。从TCP/IP通信角度上看,是从计算机A向计算机B发送
电子邮件。
     1、应用程序处理:
将文本内容进行编码转换(一般采用UTF-8)。
点击“发送邮件”,建立TCP连接。并利用这个TCP连接发送数据。它的过程首先是将应用的数据发送给下一层TCP再做实际的转发处理。

     2、TCP处理:
根据应用指示,TCP会负责建立连接、发送数据、断开连接,TCP提供将应用层发来的数据顺利发送至对端的可靠传输。
为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部。TCP首部记录了:
     1. 源端口号和目标端口号(用以识别发送主机跟接收主机上的应用);
     2. 序号(用以发送包中哪部分是数据);
     3. 校验和(用以判断数据是否被损坏);
随后将附加TCP首部的包再发送给IP。
3、IP处理
IP将TCP传过来的TCP首部+应用数据合起来视作自己的数据,并在TCP首部的前端加上自己的IP首部。因此,IP数据包中IP首部后紧跟TCP首部,然后才是数据首部及本身。IP首部中包含:
     1. 接收端IP地址
     2. 发送端IP地址
紧跟IP首部后的,还有用于判断其后面数据是TCP还是UDP的信息。
IP包生成之后,参考路由控制表(存储一系列IP地址的映射表)决定是否接受此IP包的路由或主机。随后IP包将被发送给连接这些路由或者主机网络接口的驱动程序,以实现真正的发送数据。如果尚不知道接受端的MAC地址,可以利用ARP(Address Resolution Protocol)查找。只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输。

4、 网络接口(以太网驱动)处理。
从IP传过来的IP包,对于以太网驱动而已,亦是数据,给数据附上以太网首部并进行发送处理。以太网首部包含:
     1、接收端MAC地址;
     2、发送端MAC地址;
     3、标识以太网类型的以太网数据协议;
根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的FCS(Frame Check Squeeze)由硬件计算。添加至包的最后。设置FCS是为了判断数据包是否由于噪声而被破坏。

3、发送与接收处理示意图


     4、经过数据链路层的包

分组数据包(简称为包)经过以太网的数据链路时的大致流程如上图所示。
包在流动时,从前往后依次被附加了:以太网包首部、IP包首部、TCP包首部(或者UDP包首部)以及应用程序自己的包首部和数据。而包的最后则追加了以太网包尾(FCS)。

每个包至少含有两部分信息:
     1. 接收端和发送端地址
     2. 上一层协议类型。
经过每个协议分层时,都必须有识别包发送端和接收端的信息。以太网会用MAC地址,IP会用IP地址,而TCP/UDP则用端口号作为识别两端主机的地址。即使在应用程序中,像电子邮件地址这样的信息,也是一种地址标识。这些地址信息都会在每个包经由各个分层时,附加到协议对应的包首部里。



     5、数据包接收处理

包的接收流程是发送流程的逆序过程。


           

2 0