网络编程(二)TCP/IP
一、概念
TCP/IP:利用 IP 进行通信时所必须用到的协议群的统称。有时也称 TCP/IP 为网际协议族(网际协议族(Internet Protocol Suite):组成网际协议的一组协议)。
互联网:“互联网”是指由 ARPANET 发展而来、互连全世界的计算机网络。现在,“互联网”已经是一个专有名词了,其对应的英文单词“The Internet”也早已成为固有名词。
互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。
二、TCP/IP 协议分层模型
1、硬件(物理层)
TCP/IP 的最底层是负责数据传输的硬件。TCP/IP 是在网络互连的设备之间能够通信的前提下才被提出的协议。
2、网络接口层(数据链路层)
网络接口层(有时人们也将网络接口层与硬件层合并起来称作网络通信层。)利用以太网中的数据链路层进行通信,因此属于接口层。也就是说,把它当做让 NIC 起作用的“驱动程序”也无妨。
3、互联网层(网络层)
互联网层使用 IP 协议,它相当于 OSI 模型中的第 3 层网络层。IP 协议基于 IP 地址转发分包数据。
TCP/IP 分层中的互联网层与传输层的功能通常由操作系统提供。
IP
IP 是跨越网络传送数据包,使整个互联网都能收到数据的协议。
IP 还隐含着数据链路层的功能。通过 IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信。
虽然 IP 也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重发。因此,属于非可靠性传输协议。
ICMP
IP 数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。ICMP 就是为这一功能而制定的。它有时也被用来诊断网络的健康状况。
ARP
从分组数据包的 IP 地址中解析出物理地址(MAC 地址)的一种协议。
4、传输层
传输层最主要的功能就是能够让应用程序之间实现通信。
TCP
TCP 是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP 能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。
此外,TCP 还能够有效利用带宽,缓解网络拥堵。
然而,为了建立与断开连接,有时它需要至少 7 次的发包收包,导致网络流量的浪费。
此外,为了提高网络的利用率,TCP 协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用。
UDP
UDP 有别于 TCP,它是一种面向无连接的传输层协议。
UDP 不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。
UDP 常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。
5、应用层(会话层以上的分层)
TCP/IP 的分层中,将 OSI 参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。这些功能有时由一个单一的程序实现,有时也可能会由多个程序实现。
因此,细看 TCP/IP 的应用程序功能会发现,它不仅实现 OSI 模型中应用层的内容,还要实现会话层与表示层的功能。
WWW
WWW(中文叫万维网,是一种互联网上数据读取的规范。有时也叫做 Web、WWW 或 W3。) 可以说是互联网能够如此普及的一个重要原动力。
浏览器与服务端之间通信所用的协议是 HTTP(HyperText Transfer Protocol)。所传输数据的主要格式是 HTML(HyperText Markup Language)。WWW 中的 HTTP 属于 OSI 应用层的协议,而 HTML 属于表示层的协议。
电子邮件(E-mali)
发送电子邮件时用到的协议叫做 SMTP(Simple Mail Tranfer Protocol)。
电子邮件使用 MIME(在互联网上广泛使用的、用来定义邮件数据格式一种规范。)协议,是邮件内容更丰富。这里提到的 MIME 属于 OSI 参考模型的第 6 层--表示层。
电子邮件与 TCP/IP 的发展相辅相成。电子邮件协助改善协议,更加完善的协议又可以令电子邮件的形式多样化。
文件传输(FTP)
该过程使用的协议叫做 FTP(File Transfer Prototol)。
传输过程中可以选择用二进制方式还是文本方式,使用文本方式时会自动修改换行符。这也属于表示层的功能。
在 FTP 中进行文件传输时会建立两个 TCP 连接,分别是发出传输请求时所要用到的控制连接与实际传输数据时所要用到的数据连接(这两种连接的控制管理属于会话层的功能。)
远程登录(TELNET 与 SSH)
TCP/IP 网络中远程登录常用 TELNET(TELetypewriter NETwork 的缩写。有时也称作默认协议。)和 SSH(SSH 是 Secure SHell 的缩写。) 两种协议。
三、TCP/IP 通信过程
数据包首部
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。
发送数据包
以发邮件为例,主要会经历以下几个过程
应用程序处理
会对邮件进行编码处理,相当于 OSI 的表示层功能。
不同的邮件软件有不同的发送邮件的机制,立即发送或者是由接收方发起接收才开始发送。这种从何时建立连接的机制类似于 OSI 的会话层的功能。
TCP 模块处理
TCP 负责建立连接、发送数据和断开连接等功能。
如何将应用端的数据准确传输呢?
需要在应用发过来的数据上增加一个 TCP 首部包,其中包括源端口号,目标端口号,序号(判断发送的数据包中那部分是数据)和校验(判断数据是否能正常读取)。随后将附加 TCP 首部的数据发送给 IP 模块。
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 地址交给以太网的驱动程序,实现数据传输。
网络接口(以太网)处理
从 IP 传过来的 IP 包,对于以太网驱动来说不过就是数据。给这数据附加上以太网首部并进行发送处理。
以太网首部中包含接收端 MAC 地址、发送端 MAC 地址以及标志以太网类型的以太网数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。
发送处理中的 FCS(Frame Check Sequence) 由硬件计算,添加到包的最后。设置 FCS 的目的是为了判断数据包是否由于噪声而被破坏。
发接收数据包
接收程序的处理过程刚好与发送时相反的。不做多余解释了。
版权声明: 本文为 InfoQ 作者【飞向星的客机】的原创文章。
原文链接:【http://xie.infoq.cn/article/3c4e7596c9fabdbd13e441f1f】。文章转载请联系作者。
评论