《图解TCP/IP》读书笔记二:TCP/IP基础知识_图解


TCP(Transmission Control Protocol,传输控制协议)

IP(Internet Protocol,网络之间互连的协议)

ICMP(Internet Control Message Protocol, 互联网控制消息协议)

ARP(Address Resolution Protocol,地址解析协议)

RARP(Reverse Address Resolution Protocol,反向地址转换协议)

2.2.1 TCP/IP具体含义

      从字面意义上讲, 有人可能会认为TCP/IP是指TCP和IP两种协议. 实际生活中有时也确实就是指这两种协议. 然而在很多情况下, 它只是利用IP进行通信时所必须用到的协议群的统称.

      具体来说, IP或ICMP, TCP或UDP, TELENT或FTP, 以及HTTP等都属于TCP/IP的协议

      TCP/IP 一词泛指这些协议, 因此, 有时也成 TCP/IP 为网际协议族

《图解TCP/IP》读书笔记二:TCP/IP基础知识_图解_02

2.4 TCP/IP协议分层模型

2.4.1 TCP/IP与OSI参考模型

《图解TCP/IP》读书笔记二:TCP/IP基础知识_图解_03

      OSI参考模型注重“通信协议必要的功能是什么”,而TCP/IP则更强调“在计算机上实现协议应该开发哪种程序”。

2.4.2 硬件(物理层)

      TCP/IP的最底层是负责数据传输的硬件。这种硬件就相当于以太网或电话线路等物理层的设备。

网络接口层(数据链路层)

      网络接口层利用以太网中的数据链路层进行通信,属于接口层,把它当做让NIC起作用的“驱动程序”也无妨。驱动程序是在操作系统与硬件之间起桥梁作用的软件。 有时人们也将网络接口层与硬件层合并起来称为网络通信层。

互联网层(网络层)

      互联网层使用的是IP协议,相当于OSI参考模型中的第3层网络层。IP协议依靠IP地址进行转发分包数据。

《图解TCP/IP》读书笔记二:TCP/IP基础知识_TCP_04

      TCP/IP分层模型中的互联网层与传输层的功能通常是有操作系统提供的。尤其是路由器,它必须具有互联网层转发分组数据包的功能。所以连接互联网的所有的主机与路由器都必须实现IP的功能。

下面来具体看一下网络层的一些重要协议:

IP协议

      IP是跨越网络传送分组数据包, 使整个互联网都能收到数据的协议, 这期间它使用IP地址作为主机的标识.

      IP还隐含着数据链路层的功能, 通过IP, 相互通信的主机之间无论经过怎样的底层数据链路都能够实现通信.

      但是, 虽然IP是分组交换的一种协议, 但是它不具有重发机制, 所以是非可靠性传输协议. 即使分组数据包未能到达对端主机也不会重发.

      连接互联网的所有主机跟路由器都必须实现IP的功能, 即通过网络层转发分组数据包. 尤其是路由器.

ICMP协议

      虽然IP不提供可靠的传输服务, 但是如果在IP协议传输数据包时出错了, 可以通过ICMP报告, ICMP在IP模块中实现.

      ICMP, Internet控制报文协议(IP协议的小弟). 当IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时, 需要给发送端发送一个异常的通知, ICMP就是为这一功能制定的, 它有时也被用来诊断网络的健康状况.

ARP协议

      ARP协议就是将分组数据包中的IP地址解析为MAC地址的协议, 因为数据链路层通信采用的是MAC地址.

      相对应的还有一个RARP协议, RARP协议就是将MAC地址解析为IP地址的协议.

2.4.5 传输层

      传输层最主要的功能就是能够让应用程序之间实现通信. 也就是为两台主机提供端对端的通信.

      计算机内部通常运行着多个应用程序, 为了区分是哪些程序和哪些程序在进行通信, 计算机采用端口号来进行识别和管理.

      传输层最重要的两个协议就是TCP协议和UDP协议了.

TCP协议

      TCP是一种面向有连接的传输层协议. 它可以保证两端通信主机之间的通信可达.

      TCP能够正确处理在传输过程中的丢包/传输顺序错乱等异常情况. 此外, TCP还能够有效利用带宽, 缓解网络拥堵.

      然而, TCP如此可靠的通信时需要付出代价的, 有时至少需要至少7次的发包收包,导致网络流量的浪费.因此不太利于(音频,视频的数据量既定)等场合的使用.

UDP协议

      UDP是一种面向无连接的传输层协议. UDP不会关注对端是否收到了传送的数据. 如果需要检查对端是否收到了分组数据包, 或者对端是否连接到网络, 则需要我们自己在应用程序中实现.

      UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。

2.4.6 应用层(会话层以上的分层)

      TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。

      HTTP协议属于应用层的协议,HTML和电子邮件属于表示层协议。

      例如:电子邮件(E-mail)、文件传输(FTP)、远程登录(TELENET与SSH)、网络管理(SNMP)

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

2.5.1数据包首部

《图解TCP/IP》读书笔记二:TCP/IP基础知识_TCP_05

      每个分层中,都会对所发数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。 在下一层的角度来看,从上一层收到的包全部都被视为本层的数据。

包、帧、数据报、段、消息
包是全能性术语。
帧用于表示数据链路层中包的单位。
数据包是IP和UDP等网络层以上的分层中包的单位。
段则表示TCP数据流中的信息。
消息是指应用协议中数据的单位。

包首部就像是协议的脸

      网络中传输的数据包由两部分组成: 一部分是协议所要用到的首部,另一部分是上层传过来的数据。

      首部的结构由协议的具体规范详细定义。例如,识别上一层协议的域应该从包的哪一位开始取多少个比特、如何计算校验和并插入包的哪一位等。相互通信的两端计算机如果在识别协议的序号以及校验和的计算方法上不一样,就根本无法实现通信。

      因此,在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的内容。因此,看到包首部就如同看到协议的规范。难怪有人说首部就像是协议的脸了。

2.5.2 发送数据包

      假设甲给乙发送电子邮件,内容为:“早上好”。而从TCP/IP通信上看,是从一台计算机A向另一台计算机B发送电子邮件。我们就通过这个例子来讲解一下TCP/IP通信的过程。

1. 应用程序处理

      启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容"早上好", 鼠标点击发送按钮就可以开始TCP/IP通信了。
首先,应用程序中会进行编码处理。例如,日文电子邮件使用ISO-2022-JP或UTF-8进行编码。这些编码相当于OSI的表示层功能。

      编码转换后,实际邮件不一定会马上被发送出去,因为有些邮件的软件又一次同时发送多个邮件的功能,也可能会有用户点击收信按钮以后才一并接收新邮件的功能。 像这种何时建立连接何时发送数据的管理功能,从某种宽泛的意义上看属于OSI参考模型中会话层的功能。

      应用在发送邮件的那一刻建立TCP连接,从而利用这个TCP连接发送数据。 它的过程首先是将应用的数据发送给下一层TCP,再作实际的转发处理。

2. TCP模块的处理

      TCP根据应用的指示,负责建立连接,发送数据以及断开连接。 TCP提供将应用层发来的数据顺利发送至对端的可靠传输。

      为了实现TCP的这一功能,需要再应用层数据的前端附加一个TCP首部,**TCP首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以发送的包中那部分是数据)以及校验和(用以判断数据是否被损坏)。**随后将附加了TCP首部的包再发送给IP.

3. IP模块的处理

      IP将TCP传过来的TCP首部和TCP数据合起来当作自己的数据,并在TCP首部的前端加上自己的IP首部。因此,IP数据报中IP首部后面紧跟着TCP首部,然后才是应用的数据数据首部和数据本身。IP首部中包含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息。

      IP包生成后,参考路由控制表决定接受此IP包的路由或主机。随后,IP包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据。

      如果尚不知道接收端MAC地址,可以利用ARP(Address Resolution Protocol)查找。只要知道了对端的mac地址,就可以将mac地址和IP交给以太网的驱动程序,实现数据传输。

4. 网络接口(以太网驱动)的处理

      从IP传过来的IP包,对于以太网驱动来说不过就是数据。给这个数据附加上以太网首部并进行发送处理。 **以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。**根据上述信息产生的以太网数据包通过物理层传输给接收端。发送处理中的FCS由硬件计算,添加到包的最后。设置FCS的目的是为了判断数据包是否由于噪声而被破坏。

《图解TCP/IP》读书笔记二:TCP/IP基础知识_知识_06

2.5.3 经过数据链路的包

      分组数据报(简称包)经过以太网流动时,从前往后依次被附加了以太网包首部、IP包首部、TCP首部(或者UDP首部)以及应用自己的包首部和数据。而包的最后则追加了以太网包尾(Ethernet Tailer).

      每个包首部中至少都会包含两个信息:一个是发送端和接收端地址,另一个是上一层协议类型。

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

《图解TCP/IP》读书笔记二:TCP/IP基础知识_图解_07

      此外,**每个分层的包首部中还包含一个识别位,它是标识上一层协议的种类信息。**例如以太网的包首部中的以太网类型,IP中的协议类型以及TCP/UDP中两个端口的端口号都是起着识别协议类型的作用。就是在应用的首部信息中,有时也会包含一个用来识别其数据类型的标签。

2.5.4 数据包接收处理

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

5. 网络接口(以太网驱动)的处理

      主机收到以太网包以后,首先从以太网首部找到MAC地址判断是否位发送给自己的包。如果不是发送给自己的包则丢弃数据。

      而如果接收到了恰好是发给自己的包,就查找以太网包首部中的类型从而确定以太网协议所传送过来的数据类型,如果这时不是IP而是其他诸如ARP的协议,就把数据传给ARP处理。总之,如果以太网首部的类型域包含了一个无法识别的协议类型,则丢弃数据。

6. IP模块的处理

      IP模块收到IP包首部以及后面的数据部分以后,也做类似的处理。如果判断得出包首部中的IP地址与自己的IP地址匹配,则可接收数据并从中查找上一层的协议。如果上一层是TCP就将IP包首部之后的数据传给TCP处理;如果是UDP则将IP包首部后面的部分传给UDP处理。 对于由路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据。

7. TCP模块的处理

      在TCP模块中,首先会计算以下校验和,判断数据是否被破坏。然后检查是否在按序号接收数据。最后检查端口号,确定具体的应用程序。

      数据接收完毕后,接收端则发送一个确认回执给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送。

       数据被完整的接收以后,会传给由端口号识别的应用程序。

8. 应用程序的处理

      接收端应用程序会直接接收发送端发送的数据。通过解析数据可以获知邮件的收件人地址是乙的地址。如果主机B上没有乙的邮件信箱,那么主机B返回给发送端一个无此收件地址的报错信息。

但在这个例子中,主机B上恰好有乙的收件箱,所以主机B和收件人乙能够收到电子邮件的正文。邮件会被保存到本机的磁盘上。如果保存也能正常进行,那么接收端会返回一个“处理正常”的回执给发送端。反之,一旦出现磁盘满,邮件未能成功保存等问题,就会发送一个处理异常的回执给发送端。 由此,用户乙就可以利用主机B上的邮件客户端接收并阅读由主机A上的用户甲发送过来的电子邮件。


个人微信公众号:

《图解TCP/IP》读书笔记二:TCP/IP基础知识_基础_08

作者:jiankunking