《图解TCP/IP》--TCP/IP协议分层模型与通信

Posted chenloveslife

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《图解TCP/IP》--TCP/IP协议分层模型与通信相关的知识,希望对你有一定的参考价值。

 本篇随笔只是粗略了解了一下TCP/IP协议分层及其之间的通信,往后针对每个部分会深入理解,以下仅供参考。

一、TCP/IP与OSI参考模型关系

  技术分享图片

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

二、TCP/IP协议分层模型各个层次讲解

  1. 硬件(物理层)

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

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

  网络接口层利用以太网中的数据链路层进行通信,因此属于接口层。也就是说,把它当作让NIC起作用的“驱动程序”也无妨。

  3. 互联网层(网络层)

  互联网层使用IP协议,它相当于OSI模型中的第三层网络层,IP协议基于IP地址转发分包数据。

  技术分享图片

  (1)IP协议

    IP是跨越网络传输数据包,使整个互联网都能收到数据的协议,IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识。

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

    连接互联网的所有主机和服务器必须都实现IP的功能,其它连接互联网大的网络设备(网桥、中继器、集线器)没必要一定要实现IP或TCP的功能。

  (2)ICMP协议

    IP数据包在发送过程中一旦发生异常而无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。ICMP就是为了这个功能定制的。

  (3)ARP协议

    从分组数据包的IP地址中解析出物理地址(MAC)的一种协议。

  4. 传输层

  传输层的主要功能就是能够让应用程序之间实现通信。计算机内部同一时间内运行着多个程序,为此必须分清是哪些程序与哪些程序在通信,识别的就是这些应用程序的端口号。

  技术分享图片

  (1)TCP

    TCP是一种面向有连接的传输层协议,保证两端通信主机之间可以达到,还可以正确处理在传输过程中丢包、传输顺序乱掉等异常情况,有效利用带宽缓解网络拥堵。

  (2)UDP

    UDP是一种面向无连接的传输层协议,UDP不会关注对方是否接收到了发送的数据。

  5. 应用层(会话层、表示层、应用层)

  TCP/IP分层中把OSI的会话层表示层应用层的功能都集中到了应用程序中实现。TCP/IP的应用的架构绝大多数属于客户端/服务端模型,这种通信模式中,提供服务的程序会预先被部署在服务器中,等待接受任何时刻客户可能发送的请求。

  技术分享图片

  (1)WWW

    WWW主要使用的协议有实现浏览器和服务端之间的通信协议:HTTP(超文本传输协议)、传输的主要格式:html(超文本标记语言)、URL(统一资源定位符)。

  (2)E-Mail

    发送电子邮件使用到的协议有MIME、SMTP

  (3)FTP

    文件传输协议是将某个计算机硬盘的文件转移到本地的硬盘中所使用的协议,会建立两个TCP连接,分别是发送出传输请求时用到的控制连接和实际传输数据时用到的数据连接。

  (4)远程登录(TELNET、SSH)

  (5)网络管理(SNMP)

 三、TCP/IP分层模型通信实例

  1. 数据包首部

  图一:

  技术分享图片

  图二:

 

  技术分享图片

  图二中每个分层,都会对所发送的数据附加一个首部,在这个首部包含了必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所发送的内容为数据。

  注:包、帧、数据包(报文)、段、消息区别:

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

  

  2. 发送数据包

  应用场景:假设甲给乙发送电子邮件,内容为“早上好”。从TCP/IP通信角度上看,是从计算机A向计算机B发送电子邮件。
  (1)应用程序处理:
    将文本内容进行编码转换(一般采用UTF-8)。点击“发送邮件”,建立TCP连接。并利用这个TCP连接发送数据。它的过程首先是将应用的数据发送给下一层TCP再做实际的转发处理。
  (2)TCP处理:
    根据应用指示,TCP会负责建立连接、发送数据、断开连接,TCP提供将应用层发来的数据顺利发送至对端的可靠传输。
    为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部。TCP首部记录了:源端口号和目标端口号(用以识别发送主机跟接收主机上的应用);序号(用以发送包中哪部分是数据);校验和(用以判断数据是否被损坏);随后将附加TCP首部的包再发送给IP。
  (3)IP处理
    IP将TCP传过来的TCP首部+应用数据合起来视作自己的数据,并在TCP首部的前端加上自己的IP首部。因此,IP数据包中IP首部后紧跟TCP首部,然后才是数据首部及本身。IP首部中包含:接收端IP地址和发送端IP地址,紧跟IP首部后的,还有用于判断其后面数据是TCP还是UDP的信息。
    IP包生成之后,参考路由控制表(存储一系列IP地址的映射表)决定是否接受此IP包的路由或主机。随后IP包将被发送给连接这些路由或者主机网络接口的驱动程序,以实现真正的发送数据。如果尚不知道接受端的MAC地址,可以利用ARP(Address Resolution Protocol)查找。只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以太网的驱动程序,实现数据传输。
  (4)网络接口(以太网驱动)处理。
    从IP传过来的IP包,对于以太网驱动而已,亦是数据,给数据附上以太网首部并进行发送处理。以太网首部包含:接收端MAC地址;发送端MAC地址;标识以太网类型的以太网数据协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的FCS(Frame Check Squeeze)由硬件计算。添加至包的最后。设置FCS是为了判断数据包是否由于噪声而被破坏。
  
  过程:
  技术分享图片
  一个完整数据包的主要内容:

  技术分享图片

 

  3. 数据包接受处理

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

  (1) 网络接口层的处理

    主机收到以太网包以后,首先从以太网的包首部找到MAC地址判断是否为发送给自己的包,如果不是则丢弃数据;如果是接收了是自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型,这个例子中显然是IP包,因此再将数据传给处理IP的子程序,如果不是IP而是诸如ARP的协议,就把数据传给ARP处理。

  (2)IP模块的处理

    IP模块收到IP包首部及以后的数据部分以后,如果判断出包首部中IP地址和自己IP地址匹配,则可接收数据并从中查找上一层协议。如果上一层是TCP就传给IP包首部之后的部分传给TCP处理,如果是UDP同理,对于有路由器的情况下,接收端往往不是自己的地址,此时就需要借助路由控制表才转发数据。

  (3)TCP模块的处理

    在TCP模块中,首先会计算一下校验和来判断数据是否损坏,然后检查是否在按照序号接受数据,最后检查端口号来确定具体的应用程序。数据接收完毕后,接收端则发送一个“确认回执”给发送端,如果这个信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一致反复发送。

  (4)应用程序的处理

    接收端应用程序会直接接收发送端发送的数据。 通过解析数据可以获知邮件的收件人地址是乙的地址,如果主机B上没有乙的信箱,那么主机B则会返回给发送端一个“无此收件地址”的报错信息,如果有则返回“处理正常”,如果发送成功但未能成功保存在主机B上则会返回一个“处理异常”。

 

 

以上是关于《图解TCP/IP》--TCP/IP协议分层模型与通信的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络 OSI参考模型与TCP/IP分层模型

《图解TCP/IP》--OSI参考模型

《图解HTTP》--TCP/IP初识

OSI模型和TCP/IP分层模型?看完这一篇就够了!

TCP/IP协议学习总结

图解计算机网络TCP/IP分层模型