第二章:TCP/IP基础知识
Last updated
Last updated
OSI 参考模型 和 TCP/IP 的对应关系:
最开始,通信传输运用在军用。为了在遭到敌方攻击和破坏,也可以经过迂回实现通信,分布式通信的概率出现了,最后分组交换技术便应运而生。
最开始 互联网(Internet) 是指将多个网络连接使其构成 一个更大的网络。
现在,互联网(The Internet) 变成了专有名词,是指由 ARPANET 发展而来、互连全世界的计算机网络。
互联网进行通信时,需要相应的网络协议。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。
小范围的网络互相连接就形成了连接全世界的互联网。
互联网中的每个网络都是由骨干网(BackBone)和末端网(Stub)组成的。
每个网络之间通过 NOC(Network Operation Center 网络操作中心)相连。
如果网络的运营商不同,就称为异构网络。
如果异构网络相连,就需要有 IX(Internet Exchange 网络交换中心)的支持。
ISP:Internet service provider,网络服务提供商
区域网:在特定区域内由团体或志愿者所运营的网络。
连接互联网需要向 ISP 或区域网提出申请。
TCP/IP 的最底层是负责数据传输的硬件。这种硬件就相当于以太网或电话线路等物理层的设备。
网络接口层利用以太网中的数据链路层进行通信。
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层的必要信息,如发送的目标地址以及协议相关的信息。
通常,为协议提供的信息为包首部,所要发送的内容为数据。
包、帧、数据报、段、消息
包:全能性术语
帧:表示数据链路层中包的单位
数据报:表示 IP 和 UDP 等网络层以上的分层中包的单位
段:表示 TCP 数据流中的信息
消息:指应用协议中数据的单位
包首部
数据包包括两个部分:协议要用到的首部,上层传过来的数据
首部的结构由协议的具体规范详细定义。如:
识别上一层协议的域应该从包的哪一位开始取多少比特
如何计算校验和并插入包的哪一位
所以,在包的首部,明确标明了协议应该如何读取数据
最后,每个包首部至少包含两个信息:
发送端和接收端地址
上一层协议类型
示例:A 向 B 发送邮件
应用程序处理
(应用层)启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容,鼠标点击 发送 按钮就可以开始TCP/IP 通信
(表示层)应用程序中会进行编码处理
(会话层)编码转化后,实际邮件也不一定会马上发出,因为有些邮件软件有一次同时发送多个邮件的功能。像这种何时建立连接、何时发送数据的管理,属于 OSI 参考模型的 会话层功能
应用在发送邮件的那一刻建立 TCP 连接,从而利用这个 TCP 连接发送数据。首先将应用数据发送到下一层的 TCP,再做实际的转发处理
TCP 模块的处理
TCP 根据应用的指示(根据会话层建立销毁连接的时机),负责建立连接、发送数据以及断开连接
TCP 提供将应用层发来的数据顺利发送到对端的可靠传输
IP 模块的处理
首先,IP 将 TCP 传来的首部和数据部分当做自己的数据部分,并添加自己的 IP 首部
IP 首部中包含 接收端 IP 地址、发送端 IP 地址
紧随 IP 首部的还有用来判断后面数据是 TCP 还是 UDP 的信息
IP 包生成以后,参考路由控制表决定接受此 IP 包的路由或主机。随后,IP 包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正的发送数据
如果尚不知道接收端的 MAC 地址,可以利用 ARP 查找。只要知道了对端的 MAC 地址,就可以将 MAC 地址和 IP 地址交给以太网的驱动程序,实现数据传输
网络接口(以太网驱动)的处理
同理,从 IP 传过来的 IP 包,对于以太网驱动来说就是数据,给数据附加上自己的首部并进行发送处理
以太网首部中包含:接收端 MAC 地址、发送端 MAC 地址、标志以太网类型的以太网数据的协议
同时,在整个包的最后面,加上 FCS
根据上述信息产生的以太网数据将通过物理层传输给接收端
包的接收流程是发送流程的逆序过程
网络接口(以太网驱动)的处理
主机收到以太网包以后,首先从以太网的包首部找到 MAC 地址判断是否为发给自己的包,如果不是就丢弃数据。
如果是发送给自己的包,就检查包首部的类型域从而确定以太网协议所传过来的数据类型
如果数据类型为 IP 包,则传给处理 IP 的子程序
如果数据类型为 ARP 协议,则传给 ARP 处理
若无法识别类型,则丢弃
IP 模块的处理
收到 IP 包后,做类似的处理,根据包首部的 IP 地址和自己的 IP 匹配,则查找上一层的协议
若上一层协议为 TCP,则传给 TCP 处理
若上一层协议为 UDP,则传给 UDP 处理
对于有路由器的情况下,往往目标地址不是自己,需要进行转发,则根据路由转发表进行转发包
TCP 模块的处理
检查校验和,判断数据是否被破坏
检查是否按照序号接收数据
检查端口号,确定具体应用程序
(可靠传输)数据接收完毕后,接收端会发送一个 “确认回执” 给发送端。若这个信息没有顺利达到发送端,那么发送端会认为数据没有收到,从而一直反复发送数据
数据完整的接收后,会传给由端口号识别的应用程序
应用程序的处理
接收端应用程序会直接接收发送端发送的数据。通过解析数据可以获知邮件的收件人的地址。如果主机 B 上没有收件人的邮件信箱,那么主机 B 就返回一个 无此收件地址 的报错信息