我们接触计算机网络最多的协议,那就是TCP/IP协议了,TCP/IP协议同时也是互联网中最为著名的协议。
TCP/IP的历史背景
最初还没有TCP/IP协议的时候,也就是再20世纪60年代,许多国家和地区认识到通信技术的重要性。美国国防部希望能够研究一种即时通信线路被破坏也能够通过其他路线进行通信的技术。为了实现这种技术,出现了分组网络。
即使再两个节点通信的过程中,几个节点遭到破坏,却依然能够通过改变线路等方式使得两个节点之间进行通信。
这种分组网络促使了ARPANET(advanced Research Projects Agency Network)的诞生。ARPANET是第一个具有分布式控制的广域包分t组交换网络,也是最早实现TCP/IP协议的前身。
以上协议汇总起来,就是TCP/IP协议蔟。
TCP/IP标准
TCP/IP 相较于其他的协议标准,更注重开放性和实用性,即标准能否被实际应用。TCP/IP标准协议就是我们班所熟知的RFC文档,RFC不仅规范了协议标准还包含了协议的实现和使用信息。
TCP/IP协议簇
OSI模型一共有七层,从下到上分别是物理层,数据链路层,网络层,传输层(运输层),会话层,表示层和应用层。
简化为:应用层,传输层,网络层,通信链路层。
我们从通信链路层开始介绍一下这些系一层以及层之间的协议。
通信链路层
如果非要细分的话,通信链路层也可以分为物理层和数据链路层。
物理层
物理层是TCP/IP的最底层是负责传输的硬件,这种哦硬件就相当于是以太网或者电话线路等物理层的设备。
数据链路层
数据链路层位于物理层和网络层中间,数据链路层定义了在单个链路上如何传输数据。
网络层
网络层主要使用IP协议,IP协议基于IP地址转发分包数据。
IP协议的主要作用就是将分组数据包发送到目标主机。
TCP/IP 分层中的互联网层与传输层的功能通常由操作系统提供。
IP协议还隐含着数据链路层的功能,通过IP协议,相互通信的主机之间不论经过怎样的数据链路,都能够实现相互通信。
虽然IP也是一种分组交换协议,但是IP协议却不具备重发机制。及时数据没有到达另一端也不会进行重发,所以IP属于非可靠性协议。
网络层还有一种协议就是ICMP,因为IP协议在数据包的发送过程中可能会出现异常,当IP数据包因为异常而无法到达目标地址时,需要给发送端发送一个异常通知,ICMP的主要功能就在于此,ICMP也可以被用来诊断网络状况。
传输层
TCP协议是传输层协议的一种
传输层就像高速公路一样,连接两个城市的道路。它的主要功能是让应用层的应用程序之间完成通信和数据交换。在计算机内部运行着很多应用程序,每个应用程序对应一个端口号,我们一般使用端口号来区分这些应用程序。
传输层的协议主要分为面向有连接的协议TCP和面向无连接的协议UDP
TCP
TCP是一种可靠的协议,它能够保证数据包的可靠性交付,TCP能够正确处理传输过程中的丢包、传输顺序错乱等异常情况。此外,TCP还提供拥塞控制用于缓解网络拥堵。
UDP
UDP是一种不可靠协议,它无法保证数据的可靠交付,相比TCP,UDP不会检查数据包是否到达,网络是否阻塞等情况,但是UDP的效率比较高。
UDP协议常用于分组数据较少或者广播,多播等视频通信和多媒体领域。
应用层
在TCP/IP协议簇中,将OSI标准模型中的会话层,表示层都归为应用层。应用层的架构大多属于客户端/服务端模型。在这种架构中,服务端通常会提前部署到服务器上,等待客户端的连接,从而提供服务。
数据包的发送过程
数据包结构
在每一层中,都会对所发送的数据增加一个头 ,这个头中包含了该层必要的信息。每一层都会对数据进行处理并在数据包中附上这一层的必要信息。
应用层的处理
主机A打开某应用程序,或者打开聊天窗口输入Hello,点击发送,那么这个Hello就作为一个数据包遨游在网络中,首先应用层会对这个数据包进行处理,包括字符编码、格式化等等,这其实是OSI中表现层的工作,只不过在TCP/IP协议中都归为了应用层。
数据包在发送的那一刻建立TCP连接,这个连接相当于通道,在这之后其他数据包也会使用通道传输数据。
传输层的处理
为了描述信息能够准确的到达另一方,我们使用TCP协议来进行描述。TCP会根据应用的指示,负责建立连接,发送数据和断开连接。
TCP会在应用数据层的前端附加一个TCP的头部字段,TCP头部包含了源端口号和目标端口号,这两个端口号用于表明数据包是从哪里发出的,需要发送到哪个应用程序上;TCP头部还包含序号,用于表示该包中数据是发送端整个数据中的第几个字节的序列号;TCP头部还包含校验和,用于判断数据是否损坏,随后将TCP头部附加在数据包的头部发送给IP
网络层的处理
网络层主要负责处理数据包的是IP协议,IP协议将TCP传过来的TCP头部和数据结合当作自己的数据,并在TCP头部的前端加上自己的IP头部。因此,IP数据包后面会紧跟着TCP数据包,后面才是数据本身。IP头部包含目标地址和源地址,紧随在IP头部的还有用来判断后面是TCP还是UDP的信息。
IP包生成后,会由路由控制表判断应该发送到哪个主机,IP修饰后的数据继续向下发送给路由器或者网络接口的驱动程序,从而实现真正的数据传输。
通信链路层的处理
经由IP传过来的数据包,以太网会给数据包附上以太网的头部信息并进行发送处理。以太网头部信息包含接收端的MAC地址、发送端的MAC地址以及以太网类型的以太网数据协议等。
以下是完整的处理过程和解析过程。
左侧是数据的发送处理过程,应用层数据经过层层处理后变为可以发送昂的数据包,经过物理介质发送到指定主机中。
数据包的接收流程是发送流程的逆序过程,数据包的解析同样会经过下面这几步。
通信链路的解析
目标主机收到数据包后,首选会从以太网的头部找到MAC地址判断是否是发给自己的数据包,如果不是发给自己的数据包则会丢弃该数据包。
如果收到的数据包是发送给自己的,就会查找以太网类型判断是那种协议,如果是IP协议就会扔给IP协议进行处理。如果是ARP协议就会给ARP协议进行处理。如果协议类型是一宗无法识别的协议,就会将该数据包直接丢弃。
网络层的解析
经过以太网处理后的数据包扔给网络层进行处理,我们假设协议类型是IP协议,那么,在IP收到数据包后就会解析IP头部信息,判断IP头部信息中的IP地址是否和自己的IP地址匹配,如果匹配则接受数据并判断上一层协议是TCP还是UDP,如果不匹配则直接丢弃。
在路由的转发过程中,有的时候IP地址并不是自己的,这个时候需要借助路由表协助处理。
传输层的处理
在传输层中,我们默认使用TCP协议,在TCP处理过程中,首先会计算一下校验和,判断数据是否被损坏。然后检查是否按照序号接受数据,最后检查端口号,确定具体是哪个应用程序。
数据被完整识别后,会传递给由端口号识别的应用程序进行处理。
应用程序的处理
接收端指定的应用程序会处理发送方传递过来的数据,通过解码等操作识别出数据的内容,然后把对应的数据存储在磁盘上,返回一个保存成功的消息给发送方,如果保存失败,则返回错误消息。
数据包经过每层后,该层协议都会在数据包附上头部信息。
在数据包的发送过程中,各层以此对数据包添加了头部信息,每个头部都包含发送端和接收端地址以及上一层的协议类型。以太网会使用MAC地址,IP会用IP地址,TCP/UDP则会用端口号作为识别两端主机的地址。
每个分层的包首部还包含一个识别位,它是用来标识上一层协议的种类信息。
- 本文标题:TCP/IP基础知识总结
- 本文作者:Roy
- 创建时间:2020-11-05 09:41:18
- 本文链接:https://www.yrzdm.com/2020/11/05/tcpip/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!