参考:
https://blog.csdn.net/wuzhiwei549/article/details/105965493
TCP/IP协议详解_王佳斌的博客-CSDN博客_tcp/ip协议
小林《图解网络》
什么是TCP/IP协议?_程序员小灰的博客-CSDN博客_tcp/ip协议
TCP/IP协议簇
对于同⼀台设备上的进程间通信,有很多种⽅式,⽐如有管道、消息队列、共享内存、信号等式,⽽对于不同设备上的进程间通信,就需要⽹络通信,⽽设备是多样性的,所以要兼容多种多样的设备,就协商出了⼀套通⽤的⽹络协议。
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
狭义上讲,TCP/IP 意味着TCP、IP等在一起协同工作。TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信;IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们;IP 负责将包发送至接受者。
1、TCP/IP组成?协议体系层次对应关系?
协议体系结构主要有两种:1. OSI七层体系模型,2. TCP/IP的四层体系模型(五层模型)
2、TCP/IP协议中的四个层次?各个层次作用?
应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
1)对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输应用使用了SMTP协议、万维网应用使用了HTTP协议、远程登录服务应用使用了TELNET协议。
2)应用层还能加密、解密、格式化数据。
3)应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源。
运输层:作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的作用。且在运输层中,TCP和UDP也同样起到了中流砥柱的作用。
网络层:网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。
网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
例如:若将 IP 比作高速公路,它允许其他协议在上面行使并找到至其他电脑的出口。TCP、UDP是高速公路上的卡车,它们携带的货物就像HTTP、FTP协议。TCP、UDP是传输层协议,都是用来传输其他协议的,主要解决数据如何在网络传输;HTTP 是应用层协议,主要解决如何包装数据。
3、通信过程?
在网络通信的过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。当源主机发出数据时,数据在源主机中从上层向下层传送,而目的主机接受数据时,数据再目的主机中从下层向上层传递,具体数据处理流程(以IP包/TCP传输为例)如下。
发送方:
- ① 应用程序处理:加应用首部,编码;
- ② TCP 模块的处理:加TCP首部,TCP 负责建立连接、发送数据以及断开连接;
- ③ IP 模块的处理:加IP首部,IP 将 TCP 传过来的数据前端加上 IP 首部生成IP包, IP 包对于以太网来说就是数据;
- ④ 网络接口(以太网驱动)的处理:加以太网首部,进行发送处理,生成的以太网数据包将通过物理层传输给接收端。
接收方:
- ① 网络接口(以太网驱动)的处理:主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等;
- ② IP 模块的处理:IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP;
- ③ TCP 模块的处理:在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏;然后检查是否在按照序号接收数据;最后检查端口号,确定具体的应用程序;数据被完整地接收以后,会传给由端口号识别的应用程序;
- ④ 应用程序的处理:接收端应用程序会直接接收发送端发送的数据,通过解析数据,展示相应的内容。
4、封装?数据封装过程?
通信过程中,每层协议都要加上一个数据首部(header),称之为封装(Encapsulation)。
- 应用层:报文流
- 传输层:段(segment)
- 网络层:数据报(datagram)
- 链路层:帧(frame)
- 物理层:电信号
源主机中的应用进程先将数据交给应用层,应用层加上必要的控制信息就成了报文流,向下传给传输层;传输层将收到的数据单元加上本层的控制信息,形成报文段、数据报,再交给网络层;网络层加上本层的控制信息,形成IP数据报,传给网络接口层;网络接口层将网际层交下来的IP数据报组装成帧,并以比特流的形式传给网络硬件(即物理层),物理层如现在以太通用的网线(双绞线)、同轴电缆(有线电视)、光纤等,数据以电信号的传递方式离开源主机。
5、数据解析过程?
数据传输经过的各层协议过程如下:
以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,是指除去协议首部之外实际传输的数据)是IP、ARP、还是RAPP协议的数据报,然后交给相应的协议处理。
- 假如是IP数据报,IP协议再根据IP 首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理;
- 假如是TCP段 或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程;
注意:IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。
虽然IP、ARP、RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。
虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。
例如:通过端口号、IP地址、协议号进行通信识别:
- ① 和② 的通信是在两台计算机上进行的。它们的目标端口号相同,都是80。这里可以根据源端口号加以区分。
- ③ 和 ① 的目标端口号和源端口号完全相同,但它们各自的源 IP 地址不同。
- 此外,当 IP 地址和端口号全都一样时,我们还可以通过协议号来区分(TCP 和 UDP)。
5、TCP/IP的特点及安全性
优点:
- 时效性:TCP/IP传输协议下的数据信息传输,克服了传统信息传输方式的滞后、拖延、效率低下的问题。
- 安全准确性:计算机网络中的TCP/IP传输协议的数据传输,不仅能处理好复杂的信息结构,繁多的数据信息,还能维护数据信息的安全,确保数据信息的科学准确性。
- 传输的流畅性:基于计算机网络的TCP/IP协议,数据传输流程主要是建立TCP/IP连接、数据发送、数据接收这三个主要环节。这三个环节的无缝连接使得数据信息实现了实时性传输。在TCP/IP传输协议的通信中,为保证数据信息到达目的地址,数据的发送端口和数据的接受端口需要向双方发送信息以确认是否能够建立通信连接。建立TCP/IP连接是数据信息传输的前提条件。在建立了TCP/IP连接后,就可以进行数据信息的发送。数据信息首先进入发送缓冲区传输层,然后一层一层进行传输。在发送的过程中,传输层协议会对数据信息进行相应地封装,以便实现完整准确的传输。数据信息的接收主要就是接收计算机发送的数据传输电路板的控制命令。目的主机在接收到数据信息包后,首先会进行识别,确定该数据包的有效载体是IP、ARP还RARP,然后进行相应地数据解封处理。最后将数据信息发送到需要的应用程序。数据信息传输的过程中三个环节环环相扣,实现了基于计算机网络TCP/IP传输协议的时效性。
缺点:
- 该模型没有明显的区分服务、接口和协议的概念。因此,对于使用新技术来设计新网络,TCP/IP模型不是一个太好的模板。
- TCP/IP模型完全不是通用的,并且不适合描述除TCP/IP模型之外的任何协议栈。
- 链路层并不是通常意义上的一层。它是一个接口,处于网络层和数据链路层之间。接口和层间的区别是很重要的。
- TCP/IP模型不区分物理层和数据链路层。这两层完全不同,物理层必须处理铜缆、光纤和无线通信的传输特征;而数据链路层的工作是确定帧的开始和结束,并且按照所需的可靠程度把帧从一端发送到另一端。
安全隐患:
- 链路层:网络嗅探
- 网络层:IP欺骗、ARP欺骗、ICMP欺骗;
- 传输层:DoS、DDoS
- 应用层:DNS欺骗
安全策略:
- VPN
- 防火墙技术
- 入侵检测系统
- 访问控制策略
6、应用层
最上层的,我们能直接接触到的就是应⽤层(Application Layer),我们电脑或⼿机使⽤的应⽤软件都是在应⽤层实现。那么,当两个不同设备的应⽤需要通信的时候,应⽤就把应⽤数据传给下⼀层,也就是传输层。所以,应⽤层只需要专注于为⽤户提供应⽤功能,不⽤去关⼼数据是如何传输的,就类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关⼼快速是如何被运输的。
⽽且应⽤层是⼯作在操作系统中的⽤户态,传输层及以下则⼯作在内核态。
理论上讲,有了以下三层协议的支持,数据已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差。因此,应用层定义了各种各样的协议来规范数据格式,常见的有HTTP、FTP、SMTP等,在消息的请求头中,分别定义了请求数据格式Accept和响应数据格式Content-Type,有了这个规范以后,当对方接收到请求以后就知道该用什么格式来解析,然后对请求进行处理,最后按照请求方要求的格式将数据返回,请求端接收到响应后,就按照规定的格式进行解读。
所以说,应用层的主要工作就是定义数据格式并按照对应的格式解读数据。
向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。
7、传输层
应⽤层的数据包会传给传输层,传输层(Transport Layer)是为应⽤层提供⽹络⽀持的。
应⽤需要传输的数据可能会⾮常⼤,如果直接传输就不好控制,因此当传输层的数据包⼤⼩超过 MSS(TCP 最⼤报⽂段⻓度) ,就要将数据包分块,这样即使中途有⼀个分块丢失或损坏了,只需要重新发送这⼀个分块,⽽不⽤重新发送整个数据包。在 TCP 协议中,我们把每个分块称为⼀个 TCP 段(TCPSegment)。
当设备作为接收⽅时,传输层则要负责把数据包传给应⽤,但是⼀台设备上可能会有很多应⽤在接收或者传输数据,因此需要⽤⼀个编号将应⽤区分开来,这个编号就是端⼝。⽐如 80 端⼝通常是 Web 服务器⽤的,22 端⼝通常是远程登录服务器⽤的。⽽对于浏览器(客户端)中的每个标签栏都是⼀个独⽴的进程,操作系统会为这些进程分配临时的端⼝号。由于传输层的报⽂中会携带端⼝号,因此接收⽅可以识别出该报⽂是发送给哪个应⽤。
链路层:MAC地址;网络层:IP地址,明确了主机所在的网段。有了这两个地址,数据包就从可以从一个主机发送到另一台主机。但实际上数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序接收。而每台电脑都有可能同时运行着很多个应用程序,所以当数据包被发送到主机上以后,是无法确定哪个应用程序要接收这个包。因此传输层引入了协议来解决这个问题,为了给每个应用程序标识身份。在传输层会有两个传输协议,分别是 TCP 和 UDP,传输层提供应用程序间的通信,其功能包括:格式化信息流;提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。
TCP 的全称叫传输层控制协议(Transmission Control Protocol),⼤部分应⽤使⽤的正是 TCP 传输层协议,⽐如 HTTP 应⽤层协议。TCP 相⽐ UDP 多了很多特性,⽐如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对⽅。TCP协议 是一种面向连接的、可靠的协议, TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠数据流,通讯之后关闭连接。
UDP 就相对很简单,简单到只负责发送数据包,不保证数据包是否能抵达对⽅,但它实时性相对更好,传输效率也⾼。UDP 协议不面向连接,也不保证可靠性,使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。
8、 网络层
实际场景中的⽹络环节是错综复杂的,中间有各种各样的线路和分叉路⼝,如果⼀个设备的数据要传输给另⼀个设备,就需要在各种各样的路径和节点进⾏选择,⽽传输层的设计理念是简单、⾼效、专注,如果传输层还负责这⼀块功能就有点违背设计原则了。也就是说,我们不希望传输层协议处理太多的事情,只需要服务好应⽤即可,让其作为应⽤间数据传输的媒介,帮助实现应⽤到应⽤的通信,⽽实际的传输功能就交给下⼀层,也就是⽹络层(Internet Layer)。
⽹络层最常使⽤的是 IP 协议(Internet Protocol),IP 协议会将传输层的报⽂作为数据部分,再加上 IP 包头组装成 IP 报⽂,如果 IP 报⽂⼤⼩超过 MTU(以太⽹中⼀般为 1500 字节)就会再次进⾏分⽚,得到⼀个即将发送到⽹络的 IP 报⽂。
⽹络层负责将数据从⼀个设备传输到另⼀个设备,世界上那么多设备,⼜该如何找到对⽅呢?因此,⽹络层需要有区分设备的编号。
我们⼀般⽤ IP 地址给设备进⾏编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段,每段是 8 位。只有⼀个单纯的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道⼀个⼀个去匹配?这显然不科学。因此,需要将 IP 地址分成两种意义:
- ⼀个是⽹络号,负责标识该 IP 地址是属于哪个⼦⽹的;
- ⼀个是主机号,负责标识同⼀⼦⽹下的不同主机;
怎么分的呢?这需要配合⼦⽹掩码才能算出 IP 地址 的⽹络号和主机号。那么在寻址的过程中,先匹配到相同的⽹络号,才会去找对应的主机。
除了寻址能⼒, IP 协议还有另⼀个重要的能⼒就是路由。实际场景中,两台设备并不是⽤⼀条⽹线连接起来的,⽽是通过很多⽹关、路由器、交换机等众多⽹络设备连接起来的,那么就会形成很多条⽹络的路径,因此当数据包到达⼀个⽹络节点,就需要通过算法决定下⼀步⾛哪条路径。
所以,IP 协议的寻址作⽤是告诉我们去往下⼀个⽬的地该朝哪个⽅向⾛,路由则是根据「下⼀个⽬的地」选择路径。寻址更像在导航,路由更像在操作⽅向盘。
网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点通信”。 数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。其功能包括三方面:
- 1)处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
- 2)处理输入数据报:首先检查其合法性,然后进行寻径–假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
- 3)处理路径、流控、拥塞等问题。
9、链路层
实际场景中,⽹络并不是⼀个整体。⼀旦数据需要跨⽹络传输,就需要有⼀个设备同时在两个⽹络当中,这个设备⼀般是路由器,路由器可以通过路由表计算出下⼀个要去的 IP 地址。
那问题来了,路由器怎么知道这个 IP 地址是哪个设备的呢?于是,就需要有⼀个专⻔的层来标识⽹络中的设备,让数据在⼀个链路中传输,这就是数据链路层(Data LinkLayer),它主要为⽹络层提供链路级别传输的服务。
每⼀台设备的⽹卡都会有⼀个 MAC 地址,它就是⽤来唯⼀标识设备的。路由器计算出了下⼀个⽬的地 IP 地址,再通过 ARP 协议找到该⽬的地的 MAC 地址,这样就知道这个 IP 地址是哪个设备的了。
以太网协议规定,接入网络的设备都必须安装网络适配器(即网卡),数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。
所以链路层的主要工作就是对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。
以太网帧格式介绍:
源地址、目的地址:指网卡的硬件地址(MAC地址),长度是48位,是在网卡出厂时固化的;
类型:16位,帧类型域(IP,ARP,RARP)
网卡芯片(如DM9000A)收到的数据即如上所示的一长串数据。其中包括以太网帧头、IP报报头、传输层 协议段头、应用层所需数据。
以太网帧的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包大于拨号链路的MTU,则需要对数据包进行分片(fragmentation)。
ifconfig命令的输出中也有“MTU:1500”。不过注意,MTU 指数据帧中有效载荷的最大长度,不包括帧首部的长度。
10、物理层
当数据准备要从设备发送到⽹络时,需要把数据包转换成电信号,让其可以在物理介质中传输,这⼀层就是物理层(Physical Layer),它主要是为数据链路层提供⼆进制传输的服务。
注:部分文字图片来源于网络!
如有错误、侵权;请联系作者更改删除!