-
2021-02-03 09:15:49
目录
4.4 ARP协议(Address Resolution Protocol)
4.5 RIP协议(Routing Information Protocol)
4.7 ICMP协议(Internet Control Message Protocol)
5.1 UDP协议(User Datagram Protocol)
5.2 TCP协议(Transmission Control Protocol)
6.3 DHCP协议(Dynamic Host Configuration Protocol,动态主机配置协议)
一、网络分层
1.1 OSI七层模型
由国际标准化组织提出的一种概念模型。该模型将通信系统中的数据流划分为七个层次,每个中间层为其上一层提供功能,其自身功能则由其下一层提供,第1层在底部。
第七层 应用层:提供为应用软件而设计的接口,以设置与另一应用软件之间的通信。
第六层 表示层:把数据转换为能与接收者的系统格式兼容并适合传输的格式。
第五层 会话层:负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。对应主机进程,指本地主机与远程主机正在进行的会话
第四层 传输层:把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。
第三层 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。
第二层 数据链路层:负责网络寻址、错误侦测和改错。将比特组合成字节,进而组合成帧,用MAC地址访问介质,能发现错误但不能纠正。
第一层 物理层:建立、维护、断开物理连接。
1.2 TCP/IP 四层模型
OSI七层模型只是一种理论上的概念模型,并没有提供一个可以实现的方法,而只是描述了一些概念,并不一定就完全代表了实际情况。其实在实践中不用分的那么细致,OSI中的一些理论分层可以"合并"实现。实际情况使用的就是TCP/IP四层模型,其定义如下:
第四层 应用层:相当于组合了OSI七层模型中的会话层、表示层、应用层
第三层 传输层:同OSI七层模型中的传输层
第二层 网际层:同OSI七层模型中的网络层
第一层 网络访问(链接)层:相当于OSI七层模型中的物理层和数据链路层
1.3 五层模型
除了上面提到的理论上的七层模型和实际使用的四层模型,还有一个五层模型。这个五层模型结合了七层模型和四层模型,主要用于网络协议原理介绍,它与TCP/IP四层模型的区别就是将网络访问(链接)层分为了数据链路层和物理层。OSI七层模型、TCP/IP四层模型和五层模型对比如下:
接下来就以五层协议为标准进行总结。
二、物理层
物理层是模型中最低的一层,它确保原始数据可以在各种物理媒介上传播。所谓的媒介包括光纤、电缆或者电磁波等等,这些媒介可以传输物理信号,比如高电压、低电压。若用1表示高电压,0表示低电压,将数据转化为按照规范组合的0/1序列,就可以在物理媒介上传播了。对于接收设备,也需要接口能接受这些物理信号,将其重新转换为0/1序列,以完成数据的接收。
三、数据链路层
即连接层,在两个网络实体之间提供数据链路连接的创建、维持和释放管理,信息以帧为单位传输。所谓帧,就是一段0/1序列组合,其中有收信地址、送信地址、校验序列(探测错误)等等,其中的地址是MAC地址。帧中的数据往往符合更高层协议,供上层使用。数据链路层就像一个送货员,不会关心数据的具体内容。
此层中常见的协议有以太网、WiFi、帧中继等等,通过这些协议,我们可以建立一个局部网络(局域网),使得一个局域网中的两台计算机可以通信。
帧分为帧头、数据、帧尾,帧头和帧尾包含同步信息、收发地址信息、差错控制信息等,数据部分则包含网络层传下来的数据,比如IP数据包。
帧头包含一段被称为序言的0/1序列,开始会以一定的频率发送序言,接收设备要按照一定的频率接收才能做到不丢失信息。就像我们收听录音机之前,需要先调整接收频率,直到听清楚播报内容,这个过程叫做调频。在帧中,序言就是为了发送设备和接收设备频率一致,这个过程叫做时钟复原。时钟调整好之后,等待帧的起始信号(SFD,start frame delimiter,为固定值)。起始信号之后,还有帧的发送地址和目的地址,当然,这个地址是MAC地址。
关于数据部分,前面已经提过了,一般包含符合更高层协议的数据,但是由于数据有最小长度限制,所以尾部可能包含一部分0填充。
帧尾包含校验序列(FCS ,Frame Check Sequence),主要是为了校验数据是否发生错误。检测使用CRC(Cyclic Redundancy Check,循环冗余检查)算法:在一个n位二进制序列之后增加一个m位的二进制序列,生成长度为n+m的新二进制序列。这个m位的二进制序列可以称之为校验位,m位的校验位与n位的原数据之间存在一定的关联,如果原数据异常,就能通过校验位检测出来。
3.1 集线器和交换器
一台集线器或者交换器上有很多端口,每个端口都能连接一台设备。
-
集线器:一台设备将帧发送到集线器,集线器会将帧广播到其他所有端口,每台设备收到帧之后,检查帧的目标地址是不是本设备的MAC地址,如果不是则忽略该帧。也就是以广播的方式转送消息,所有设备都能收到其他设备发送的消息。存在的问题一个是安全性,当然可以加密消息;另外一个是不允许多路同时通信,如果两台设备同时向集线器发送消息,那么集线器会提醒发生冲突,设备上可以实现冲突检测算法,如果发生冲突,那么随机等待一段时间再发送。WiFi的工作方式与此类似,所以WiFi需要特别注重加密(WPA、WPA2)。
-
交换器:交换器记录了每个设备的MAC地址,当交换器收到帧之后,会根据帧的目的地址和本机存储的MAC地址记录,只将帧发送到对应的端口,进而准确发送到对应的设备。交换器允许多路同时通信。
四、网络层
数据链路层使得同一个局域网中的的计算机可以相互通信,但是也只限于同一个局域网。要想让一个局域网里的计算机和以太网上的另一台计算机通信,则需要一些其它手段。这就是网络层需要做的事儿:提供路由和寻址的功能,使两终端系统能够互连且决定最佳路径,并具有一定的拥塞控制和流量控制的能力。
在数据链路层的帧中,只有送信地址和收信地址(MAC地址),但是跨局域网通信至少需要四个地址(比如数据从一个计算机经过WiFi接口,以太网接口,再到另一个计算机),又由于数据链路层已经存在并且正在使用,不能随意对其更改,所以只能在数据内容上做文章:将目标地址、校验信息等写到数据内容开头,反正数据链路层也不关心具体的数据,这就是IP协议。网络层协议由IP协议规定和实现,所以网络层又称为IP层。
关于目标地址,IP协议需要的地址和数据链路层需要的地址不一样。数据链路层的地址是物理地址(MAC地址),相对应的,网络层使用的地址叫做IP地址。当设备连接网络,设备将被分配一个IP地址用作标识。通过IP地址,不同网络间的设备可以互相通讯,如果没有IP地址,我们将无法知道哪个设备是发送方,哪个是接收方。
大多数接入Internet的方式是把主机通过局域网组织在一起,然后再通过交换机或路由器等设备和 Internet 相连接。在同一个局域网络中的计算机不需要网络层,仅依靠数据链路层就可以通信,但是对于不同的网络之间相互通信则必须借助路由器等设备。
4.1 MAC地址和IP地址
两台设备进行通讯的前提就是知道双方的地址,而IP地址和MAC地址都是地址,那么仅仅依靠IP地址或者MAC地址能否完成路由呢?
随着网络接入设备越来越多,为了解决寻址的问题,网络结构被层次化构造,被划分为了很多个子网,在路由的时候,如果数据包的目的地在其他子网,那么只需要把数据包路由到该子网,剩下的工作交由子网内部处理,这极大的减少了路由器计算量。
MAC地址有48位,可以唯一表示一个网卡,是网络设备制造商生产时写在硬件内部的。而基于子网的这个结构,如果使用MAC地址进行以太网设备的寻址,那么路由器需要记住每个MAC地址所在的子网。但是理论上,MAC地址可以有2^48个,这个数据量需要占用的内存就不允许我们这样做,所以有了IP地址。(以下对于IP地址的描述都基于IPV4)。
IP地址由IP协议提供统一的地址格式。一个IP地址包含两个标识码:网络ID和主机ID。同一个局域网络上的所有设备都是用同一个网络ID,网络上的一个主机(包括路由器)有一个主机ID与其对应。IP地址(IPV4)是一个32位的二进制数,通常被分割为4个8位二进制数,一共4个字节,比如通过点分十进制表示格式为:123.324.213.23,其中每个部分都是对应8位二进制数的十进制形式。同时,Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类~E类。以C类IP地址为例:
一个C类IP地址的4段号码中,前三段为网络ID,第四段为主机ID,也就是说C类IP地址由3字节(24位)的网络地址和1字节(8位)的主机地址组成。而C类地址的最高位固定为110(二进制),所以其能表示的地址范围为:11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110,对应的点分十进制即:192.0.0.1-223.255.255.254,子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2(除去私有地址192.168.0.0到192.168.255.255)=254台。
有了IP地址,再回到寻址的问题。IP地址是和子网相关的,对于通一个子网上的设备,其IP地址前缀都是一样的(网络地址),路由器能直接通过地址前缀定位到子网,而不用像使用MAC地址那样无助。由于IP地址必须得等到设备(网卡)接入一个子网之后才能进行分配,在设备还没有IP地址的时候还是需要使用MAC地址来区分设备。一个设备的IP地址是可以变更的,当IP地址变了之后,还怎么唯一确定一个设备呢?所以IP地址切合的是层次结构,不能唯一标识一个设备。一个形象的比喻就是,MAC地址就像自己的ID号,能唯一标识自己,而IP地址就像一个邮编,方便别人找到自己的所在地,两者缺一不可。
4.2 IPV6
由于IPv4协议的地址为32位,所以它可以提供2^32,也就是大约40亿个地址,如果地球人每人一个IP地址的话,IPv4地址已经远远不够,更何况人均持有的入网设备可能要远多于一个,所以IPV4地址迟早会耗尽。IPV6就是在IPV4的基础上做了加长改进,IPV6地址为128位,解决了IPV4地址耗尽的问题。但是由于老的路由器只支持IPV4的IP包,但是无法理解IPV6格式的IP包,所以IPV4到IPV6的迁移需要伴随着路由设备的更新,而且IPV4网络早已广泛使用,所以IPV4到IPV6的迁移是一个较为漫长的过程。
4.3 IP包与接力
数据链路层以帧为单位传输,而在网络层,无论是UDP还是TCP,都是用IP数据包传递信息。IP数据包分为头部和数据,头部是为了能够实现IP协议而附加的信息,数据部分则是真正要传输的数据。
IP包的传输要通过路由器的接力,每个主机和路由中都存在一个路由表,可以根据路由表找到IP数据包传送需要走的路线。就像坐大巴,我们从A城市出发前往D城市,那么可能需要在A城市购票前往B城市,在B城市购票前往C城市,然后再从C城市到达D城市。这个就是路由的过程,只是由于网络被设计为分层的结构,以此基础进行路由效率较高。
路由表包含地址、网关、子网掩码和网卡等等信息,表里描述的是一种规则:如果目的地址符合a规则,那么路由器将IP包发送到a规则规定的中间路由器,该中间路由器收到数据后,会继续根据目的地址和本机路由表重复上述路由规则。如果根据规则,IP包能够从本机网卡发送出去,那么就不用继续路由,直接由本机网卡发送,这个时候IP包已经到目标局域网了。需要注意的是,一个路由器可以拥有多个网卡,也就是可以同时接入多个局域网。就这样,数据从主机出发,根据路由表不断接力,最终达到目标地址所在局域网,然后再由数据链路层根据帧中的MAC地址将数据发送给指定主机。
4.4 ARP协议(Address Resolution Protocol)
IP包正常接力的前提是,对于一个局域网内,每一台主机和路由器都能知道局域网内主机的IP地址和其MAC地址的对应关系,每一台主机或路由中都有一个ARP Cache用以存储局域网内主机IP地址和MAC地址的对应关系,有了这个对应关系,就能通过一个IP地址获取对应的MAC地址。而这个关系通过ARP协议传播到局域网的每个主机和路由:发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
笼统的说,IP地址处于网络层,MAC地址处于数据链路层,相互没有直接关联,通过以太网发送IP数据包时,需要先封装IP地址(网络层),再封装MAC地址(数据链路层)。但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨网络层和数据链路层,所以需要使用ARP协议。使用ARP协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。ARP包需要包裹在一个帧中,它处于数据链路层和网络层之间。IPV6中使用的是NDP协议(Neighbor Discovery Protocol),工作在网络层。
4.4.1 ARP欺骗与防治
ARP协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存。由此攻击者就可以向某一主机发送伪ARP应答报文,使发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。不过ARP欺骗也可以当做正当用途,比如将未登录用户的请求强制转向登录界面。
ARP欺骗防治手段
1. ARP静态配置:由于需要静态配置每一台计算机的ARP表,所以不适用于大型网络。
2. DHCP Snooping:启 DHCP Snooping 功能后,网络中的客户端只有从管理员指定的DHCP服务器获取IP地址,必须将交换机上的端口设置为信任(Trust)和非信任(Untrust)状态,交换机只转发信任端口的 DHCP OFFER/ACK/NAK报文,丢弃非信任端口的 DHCP OFFER/ACK/NAK 报文,从而达到阻断非法DHCP服务器的目的。
4.5 RIP协议(Routing Information Protocol)
IP包正常接力的另一个前提是每个主机和路由器上都有正确且合理的路由表。这个路由表描述了网络的拓扑结构,如果你了解自己的网络连接,可以手写自己主机的路由表,但是一个路由器可能有多个出口,路由表可能会很长,并且周围连接的其他路由器可能会随时发生变动(比如新增路由器或者路由器坏掉),我们就需要路由表能及时将转向导向其他的路由出口,所以需要一种能自动探测网络生成路由表的协议。
RIP协议就是这样一种协议,它是一种动态路由选择协议,通过距离来决定路由表。RIP协议基于距离矢量算法(DistanceVectorAlgorithms),使用“跳数”(即metric)来衡量到达目标地址的路由距离。这种协议的路由器只关心自己周围的世界,只与自己相邻的路由器交换信息,范围限制在15跳(15度)之内,再远它就不关心了。路由器向周围的路由器和主机广播自己前往各个IP的距离,收到RIP数据包的路由器和主机根据RIP包和自己到发送RIP包的主机的距离,算出自己前往各个IP的距离(比如我收到A路由器到IP1的距离为3,而我到A路由器的距离为1,那么我经过A路由到IP1的距离就为3+1=4)。如果计算出来的新距离优于路由表缓存,那么更新路由表,否则保持不变,就这样在各个点不断重复RIP广播/计算距离/更新路由表的过程,最终所有的主机和路由器都能生成最合理的路径。
由于RIP的跳数标准(超过15跳认为不可达),所以RIP更多应用于互联网的一部分。这样一个互联网的部分往往属于同一个ISP或者有同一个管理机构,所以叫做自治系统(AS,autonomous system)。自治系统内部的主机和路由根据通向外部的边界路由器来和其它的自治系统通信。各个边界路由器之间通过BGP(Border Gateway Protocol,边界网关协议)来生成自己前往其它自治系统的路由表,而自治系统内部则参照边界路由器,使用RIP来决定路由表。BGP的基本工作过程与RIP类似,但在考虑距离的同时,也权衡比如政策、连接性能等其他因素,再决定路由表。
4.6 IP协议
IP协议认为自己所处的环境是不可靠的,比如路由器坏掉、电缆断裂等,所以IP数据包在传输过程中如果出现错误,那么IP数据包会直接被丢弃,没有重试之类的补救措施,IP协议保持较为简单的处理流程,更加复杂的数据可靠性控制较由高层协议处理。
前面提到的IP接力是根据路由表抉择路径的,但是在往同一个目的地发送连续的IP数据包的过程中,路由表可能会更新,比如出现了一条新的捷径,那么后发送的IP数据包由于走了新的捷径,就可能比之前发送的IP包先到达目的地,这样就可能导致IP包到达的顺序和发送的顺序不一致。即使IPv6中的Flow Label可以建议路由器将一些IP包保持一样的接力路径,但这只是“建议”,路由器可能会忽略该建议。
4.7 ICMP协议(Internet Control Message Protocol)
ICMP协议处于网络层和传输层之间,用于在IP主机、路由器之间传递控制消息。它基于IP协议,一个ICMP包封装在IP数据包中。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP协议传输的信息可以分为两类:
一类是错误信息:上面提到的IP协议本身不会保证IP数据包的可靠性,如果IP数据包丢失,那么IP协议不会做什么补救措施,所以上游发送IP数据包的主机或路由器不知道下游数据异常,会继续发送数据包,最终导致数据包丢失。而通过ICMP包,下游的路由器和主机可以将错误信息上报给上游,从而让上游路由器和主机能够做些补救措施,但是ICMP只负责上报信息,后续的处理它并不负责。
一类是咨询类信息:比如某台设备询问路径上的每个路由器都是谁,然后各个路由器同样用ICMP包回答。
有了ICMP协议,人们可以更加方便的对IP协议出现的数据问题进行排查和错误纠正,ping和traceroute这类网络诊断工具就是基于ICMP协议。但是也有骇客利用伪造的IP包引发大量的ICMP错误消息恢复,并将这些 ICMP包导向受害主机,从而形成DOS攻击。
五、传输层
有了上面物理层、数据链路层和网络层协议,两个以太网中的计算机已经可以实现通信了,但是一个计算机中有许多的进程,每个进程都可能有通信的需求。对于每一个进程,我们需要保证数据包准确的送到该进程之中。参照网络层扩展数据链路层的背景,我们也只能在内容数据上添加更加详细的地址:端口。传输层协议(比如TCP、UDP)使用端口号来识别进程,为应用进程提供端到端的通信服务。网络层只是根据IP地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
5.1 UDP协议(User Datagram Protocol)
UDP协议的传输和IP协议类似,也是不可靠的,可以将UDP协议看作IP协议暴露在传输层的一个接口,其他没有什么大的区别。之所以设计UDP协议的一个重要原因是,IP协议没有端口的概念,它只是负责IP到IP的传输,但是不同计算机进程之间的通信要依赖端口,也就是传输层协议做的事,UDP协议是一个传输层协议,实现了端口,从而让数据包可以在IP协议的基础上进一步发送到某一个端口。特别是对于不要求可靠性的传输。
5.2 TCP协议(Transmission Control Protocol)
TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。流的特点是顺序,TCP协议是基于IP协议的,所以数据最终还是以IP数据包为单位传输。如果需要传输的数据很长,那么不能将整个数据放到一个IP数据包中,所以TCP协议封装到IP数据包的不是整个数据,而是TCP协议规定的分段(segment)或者叫做片段。分段结构类似于IP数据包,包含头部和数据部分,其中头部包含该片段的序号,依赖该序号,接收方就能做到按照流的顺序接收数据。比如已经接收到了分段1、分段2、分段3,那么接收方就开始期待片段4。如果接收到不符合顺序的数据包(比如分段8),则接收方的TCP模块可以拒绝接收,以达到按顺序接收的目的。一个分段在网络中有最大存活时间,称之为MSL(Maximum Segment Lifetime)。
5.2.1 可靠性保障-ACK和重复发送
由于片段在传输过程中可能会丢失,所以接收主机收到的数据可能是残缺不堪的。TCP的做法是在每收到一个正确的、符合次序的片段之后,就向发送方发送一个特殊的TCP片段作为ACK回执,告知发送方已经接收到该消息。如果一个片段序号为M,那么对应的ACK为M+1,也就是接收方期待接收的下一个片段的序号。如果发送方在一定时间等待之后,还是没有收到ACK回复,那么它就认为之前发送的片段发生了异常。发送方会重复发送那个出现异常的片段,等待ACK回复,如果还是没有收到,那么再重复发送原片段... 直到收到该片段对应的ACK回复。
5.2.2 滑窗管理
按照上面ACK和重复发送的逻辑:发送->等待ACK->发送->等待ACK.......。在等待ACK的时间,网络都处于闲置状态,最好能利用好这个时间。为了解决这个问题,发送方和接收方各有一个滑窗,当片段位于滑窗中时,表示TCP正在处理该片段。滑窗中可以有多个片段,也就是可以同时处理多个片段,滑窗越大,越大的滑窗同时处理的片段数目越多。TCP协议也有实时调整滑窗大小的算法,以提高效率。
我们假设一个可以容纳三个片段的滑窗,片段从左向右排列。对于发送方来说,滑窗的左侧为已发送并收到ACK的片段序列,滑窗右侧是尚未发送的片段序列。滑窗中的片段(比如片段5,6,7)被发送出去,并等待相应的ACK。如果收到片段5的ACK,滑窗将向右移动。这样新的片段从右侧进入滑窗内,被发送出去,并进入等待状态。在接收到片段5的ACK之前,滑窗不会移动,即使已经收到了片段6和7的ACK。这样,就保证了滑窗左侧的序列是已经发送的、接收到ACK的、符合顺序的片段序列。
对于接收方来说,滑窗的左侧是已经正确收到并且回复过ACK的片段(比如片段1,2,3,4),滑窗中是期望接收的片段(比如片段5, 6, 7)。同样,如果片段6,7先到达,那么滑窗不会移动。如果片段5先到达,那么滑窗会向右移动,以等待接收新的片段,如果出现滑窗之外的片段,比如片段9,那么滑窗将拒绝接收。
对于ACK,如果每个TCP分段都回复一个ACK,那么整个网络流量无疑就翻倍了。事实上,可以将ACK和其他数据片段一起发送,并且不用对每个TCP分段都发送ACK,而是通过一个ACK来通知多个分段接收成功,也就是ACK合并。接收方在接收到片段,并应该回复ACK的时候,会故意延迟一些时间,如果在延迟的时间里有后续的片段到达,就可以利用累计ACK来一起回复。比如,滑窗还没接收到片段7时,已经接收到片段8,9。当滑窗最终接收到片段7时,滑窗送出一个回复号为10的ACK回复。发送方收到该回复后会了解到片段10之前的片段已经被成功接收。这个过程就不用发送片段7,8所需的两个ACK。
通过调整滑窗大小,可以方便的控制TCP流量。TCP头部中有部分window size区域,通过这个区域,接收方将window大小通知给发送方,从而指导发送方修改窗口大小,发送方在收到通知后,会调整自己滑窗的大小,如果发送窗口变小,数据发送速率就会降低。
如果接收方不能处理消息,可以通知发送方,指导其将窗口大小变更为0(零窗口),让其停止发送。当接收方经过一段时间的处理,能继续处理消息时,可以以ACK的方式通知发送方,让发送方调整其窗口大小,恢复发送。但是ACK可能会丢失,如果ACK丢失,那么TCP传输就陷入了死锁状态(发送方一直处于零窗口)。为了防止死锁的出现,发送方会在零窗口后,向接收方发送1byte的TCP分段,并等待包含窗口大小的ACK回复,以此当做探测的手段。如果探测结果显示窗口依然为0,发送方会等待更长的时间,然后再次进行窗口探测,直到TCP传输恢复。同时,接收方宣告的窗口必须达到一定的尺寸,否则等待,这是为了防止窗口太小而导致TCP通信分段中包含的数据很小,浪费流量(主要是TCP分段头部),除非需要最小化延迟的TCP应用(比如命令行互动)。
5.2.3 三次握手
它使用三次握手建立全双工连接,流程如下:
-
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
-
服务器端收到SYN报文,回应一个SYN (SEQ=y)+ ACK(ACK=x+1)报文,进入SYN_RECV状态。
-
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established(连接已建立)状态。(图片来自网络)
5.2.4 四次挥手
TCP使用四次挥手终止连接。由于TCP连接属于全双工,在一次连接中双方都可以发送数据,所以两端都需要单独进行关闭。客户端主动断开连接的流程如下:
- 一个TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。(主动关闭)
- 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。(服务端执行被动关闭)
- 服务器关闭客户端的连接,发送一个FIN给客户端。
- 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。(图片来自于网络)
TCP连接断开的原则是当一方完成它的数据发送任务后发送一个FIN来终止这个方向的连接,首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。收到一个 FIN只意味着这一方向上没有数据流动,但是一个TCP连接在收到一个FIN后仍能发送数据(另一端)。这主要发生在第二和第三阶段之间:客户端(主动方)到服务器(被动方)的连接断开,但是服务器到客户端的连接还未断开。此时服务端可以继续向客户端发送数据,但是客户端不能向服务器发送数据。
第四步客户端发送的ACK可能会丢失,导致服务器无法收到,服务器如果没有收到ACK,将会不断重复发送FIN片段,直到收到客户端发送的ACK。所以客户端不能立即关闭,客户端会在ACK发出之后进入到一个TIME_WAIT状态,客户端会设置一个计时器,等待2MSL。如果在该时间内再次收到FIN,那么客户端会重发ACK并再次等待2MSL。MSL在前面做过介绍,代表TCP分段的最大存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL的等待时间,客户端都没有再次收到FIN,那么客户端就推断ACK已经被成功接收,则结束TCP连接。
注:以上的描述都是客户端作为断开连接的主动方,事实上服务器也可以作为关闭的主动方
5.2.5 堵塞控制
随着网络设备接入越来越多,网络开始变的繁忙,网络中出现了大量的堵塞。类似于上下班的堵车,IP数据包在网络中经过一个个路由的接力,如果一个路由器过度繁忙,会丢弃一些数据包。UDP协议还好,不用保证数据的可靠性,但是TCP协议需要保证数据的可靠传输。如果包含TCP片段的IP数据包丢失时,TCP协议会重复发送该片段,于是网络中产生了更多的数据包,原本繁忙的状况得到加剧,构成恶性循环,这种情况被称作堵塞崩溃。为了解决这一问题,TCP协议加入了堵塞控制。
TCP协议会探测网络状况,如果网络发生了拥堵,那么会控制自己发送片段的速率,以缓解网络状况。至于探测的方法主要有ACK超时和重复ACK,一旦发送方认为TCP片段丢失,则认为网络中出现堵塞。
5.3 TCP协议和UDP协议
UDP协议的产生要晚于TCP协议。早期的网络开发者开发出IP协议和TCP协议分别位于网络层和传输层,所有的通信都要先经过TCP封装,再经过IP封装(应用层->TCP->IP)。开发者将TCP/IP视为相互合作的套装。但很快网络开发者发现,IP协议的功能和TCP协议的功能是相互独立的。对于一些简单的通信,我们并不需要可靠的传输,也就不需要TCP协议复杂的建立连接和断开连接的方式(特别是在早期网络环境中,如果过多的建立TCP连接,会造成很大的网络负担)。UDP协议随之被开发出来,作为IP协议在传输层的"傀儡"。这样,网络通信可以通过应用层->UDP->IP的封装方式,绕过TCP协议。由于UDP协议本身异常简单,实际上只为IP传输起到了桥梁的作用,而UDP协议也可以相对快速地处理这些简单的通信。
六、应用层
就像现实生活中,不同国家的人可能使用不同的语言,要与一个国家的人交流,需要用他使用的语言,不然就会存在沟通问题。对应到应用程序,一个计算机中不同的进程所做的事可能不一样,而他们所能理解的数据规则也可能不一样,除了让进程能够准确接收数据包外(传输层保证),还需要保证它能够正确理解数据包。应用层协议就是做这样一件事:进一步规范数据包,以达到我们的目的。
6.1 DNS协议
域名是IP地址的代号,通常由字符构成,比如blog.csdn.net,这要比101.200.35.175这种IP格式更加容易记忆。域名解析系统(DNS)就负责将域名翻译为IP地址,域名和IP地址的对应关系存储在DNS服务器,这些服务器是指在网络中进行域名解析的一些服务器(计算机),它们也有自己的IP地址,使用DNS协议进行通信。DNS协议基于UDP协议,属于应用层协议。
DNS服务器构成一个分级的树状体系。上图中(网图),每个节点为一个DNS服务器,每个节点都有自己的IP地址。树的顶端为用户电脑出口处的DNS服务器,树的末端是真正的域名/IP对应关系记录。一次DNS查询就是从树的顶端节点出发,最终找到相应末端记录的过程。在Linux下,可以使用cat /etc/resolv.conf,在Windows下,可以使用ipcofig /all
,来
查询出口DNS服务器。中间节点根据域名的构成,将DNS查询引导向下一级的服务器。比如说一个域名cs.berkeley.edu,DNS解析会将域名分割为cs, berkeley, edu,然后按照相反的顺序查询(edu, berkeley, cs)。出口DNS首先根据edu,将查询指向下一层的edu节点。然后edu节点根据berkeley,将查询指向下一层的berkeley节点,这台berkeley服务器上存储有cs.berkeley.edu的IP地址。
并不是每次域名解析都要完整的经历解析过程,本机DNS Resolver通常都有DNS缓存,在进行DNS查询之前,计算机会先查询缓存。
6.1.1 反向DNS
上面的DNS查询均为正向DNS查询:已经知道域名,想要查询对应IP。而反向DNS(reverse DNS)是已经知道IP的前提下,想要查询域名。
6.2 HTTP协议
即超文本传输协议,是一个简单的请求(request)-响应(response)协议,它通常运行在TCP协议之上,属于应用层协议。它指定了客户端可能发送给服务器什么样的消息,以及得到什么样的响应。
HTTP协议规定了请求和响应的格式,请求包含请求行、请求头、空行和请求体,响应包含状态行、响应头、空行和响应体。
6.2.1 请求行、请求头和请求体
请求行:
只有一行,包含三部分信息,分别是请求的方法(比如POST、GET等),请求的资源路径和HTTP协议的版本。比如 GET /shakespeare/v2/notes/636c1ee16eba/book HTTP/1.1。
HTTP/1.1协议定义的8中请求方法,但是并不是所有的服务器都必须支持所有的请求方法,比如APACHE作为一个网页服务器,支持GET、POST等方法,但是不必支持CONNECT等方法:
-
GET:主要用于从服务器获取资源,也可以用于传输不重要的数据,通过改写URL的方式实现:URL?param={param}&...
-
POST:主要用于向服务器提交数据,数据位于http请求的主体,比如提交表单。
-
HEAD:类似于GET,不过返回的响应中没有数据,响应头中包含的元信息应该和一个GET请求的响应消息相同,常用来测试超链接的有效性、可用性和是否被串改等。
-
DELETE:请求服务器删除Request-URL所标识的资源。
-
CONNECT:HTTP/1.1协议预留的方法,能够将连接改为管道方式的代理服务器。通常用于代理服务器,以代理服务器为跳板代替用户发起请求,然后将数据原模原样的返回。
-
OPTIONS:类似于HEAD方法,这个方法会请求服务器返回该资源所支持的所有HTTP请求方法,该方法会用*来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常。
-
TRACE:请求服务器回显其收到的请求信息,该方法主要用于HTTP请求的测试或诊断。
-
PUT:从语义上来说,PUT方法向指定资源位置(URI)上传其最新内容,如果已经存在则完全覆盖,否则新建。PUT和POST的主要区别可以从幂等性切入,由于PUT是上传最新的内容,服务器原有资源会被完全代替,所以是幂等的。如果只提交部分内容,又需要幂等,那么不要使用PUT(因为会完全覆盖)。而POST在服务端的实现是不可预知的,如果每次更新部分内容,那么不能保证幂等性。
请求头:头信息可以有多行,每一行都是一个键值对,关键字和值用英文冒号“:”分隔。请求头通知服务器有关于客户端请求的信息比如 Content-type: text/plain。头信息是对请求行的补充。
请求体:主体部分包含了具体的资源
6.2.2 状态行、响应头和响应体
状态行:
类似于请求行,响应行也包含三部分信息,分别是协议版本、状态码和状态描述。比如 HTTP/1.1 200 OK,其中OK是对状态码200的描述,只是为了方便人类阅读,计算机只关心状态码,即这里的200,表示一切OK,资源正常返回。状态码有很多,比如302:重定向,404:找不到资源,403:权限不足等等
响应头:类似请求头,Content-type说明了主体所包含的资源的类型。根据类型的不同,客户端可以启动不同的处理程序,比如:
- text/plain:普通文本
- text/html:HTML文本
- application/json; charset=utf-8:json数据,编码为utf-8
响应体:返回的资源,类型参照Content-type。
6.2.3 HTTP请求流程
通过浏览器访问一个网页:
1、浏览器向DNS服务器请求解析该 URL 中的域名所对应的 IP 地址
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接
3、浏览器发起HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器
5、释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求
6、浏览器将该 html 文本并显示内容
6.2.4 HTTP/2改进
多路复用(Multiplexing)
在 HTTP/1.1 协议中 ,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制,超过限制数目的请求会被阻塞。所以一些站点会有多个CDN域名,目的就是为了变相解决对同一域名的请求限制问题。多路复用则允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。所以HTTP/2可以不依赖建立多个TCP连接实现多流并行处理。HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息,并行的在同一个TCP连接上流转。
二进制分帧
在HTTP/2(应用层)和传输层之间新加入了一个二进制分帧层。在二进制分帧层中,HTTP/2 把传输的消息分割为更小的消息和帧,并且采用二进制的格式和编码,而非HTTP/1.0的文本格式,效率更高。其中 HTTP1.x 的头部信息会被封装到 HEADER frame,而相应的消息体则封装到 DATA frame 里面。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
服务器推送
服务端可以在发送HTML时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。例如服务端可以主动把JS和CSS文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。
头部压缩
HTTP/2对消息头采用HPACK(专为HTTP/2头部设计的压缩格式)进行压缩传输,能够节省消息头占用的网络流量。而HTTP/1.x每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。
6.3 DHCP协议(Dynamic Host Configuration Protocol,动态主机配置协议)
DHCP协议基于UDP协议,常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。网络上的点对点沟通需要有IP地址,但是新接入网络中的主机需要通过DHCP获取IP地址,所以DHCP需要依赖UDP协议的广播通信,把UDP数据包发送到网络的广播地址上,网络上的每个设备都能收到。
DHCP通信分为四步:
- Discovery:客户机发广播,搜寻DHCP服务器
- Offer:DHCP服务器发出邀请,提供一个可用的IP地址
- Request:客户机正式请求使用该IP地址
- Acknowledge:DHCP服务器确认,并提供其他配置参数
6.3.1 DHCP攻击
针对DHCP的一种攻击办法是从服务器那里骗IP地址。攻击者的电脑可以不断发出DHCP请求,冒充成新入网的客户机。于是DHCP服务器的地址池被耗干,无法分配地址给后来的用户。后来的用户再也没法使用网络服务。攻击者很可能会继续下套,攻击者占有了大量IP地址,可以装扮成新的DHCP服务器,把自己骗来的IP地址分配给网络上的新用户。攻击者伪装DHCP服务器之后,可以让自己成为DNS服务器或者网络的出口。于是客户机的域名解析和外网通信,必须经过攻击者的电脑。这个时候,攻击者可以偷听通信、伪装成客户机、假扮成某个域名的网站。
参考:
百度百科
维基百科
更多相关内容 -
-
常见网络协议汇总
2021-08-06 15:03:27常用网络协议前言TCP/IP五层网络模型回顾应用层协议DNS协议:HTTP协议HTTPS协议传输层协议UDP协议TCP网络层IP协议ICMP协议数据链路层ARP协议物理层整体的网络传输流程 前言 本篇博客将对基于 TCP/IP的五层网络模型 ...前言
本篇博客将对基于 计算机网络五层模型 中的常见协议做以总结 ,目的通过这些具体的协议更深刻的认识整体网络的传输流程及相关网络原理
计算机网络五层模型回顾
- 应用层:为用户为用户的应用进程提供网络通信服务
协议——DNS协议、HTTP协议、HTTPS协议 - 传输层:负责两台主机之间的数据传输,将数据从发送端传输到接收端
协议——TCP协议、UDP协议 - 网络层:负责传输的地址管理和路由选择,在众多复杂的网络环境中确定一条合适的路径
协议——IP协议 - 数据链路层:负责设备之间数据帧的传送和识别,将网络层传递的数据报封装成帧,在处于同一个数据数据链路节点的两个设备之间传输
协议——ARP协议、MTU协议 - 物理层:负责光电信号的传递方式,实现相邻计算机节点之间比特流的透明传输
对于五层网络模型基本都是耳熟能详,但是有没有思考过,网络为什么要这样分层呢?
最直接的回答就是为了简化网络设计的复杂性,通信协议采用分层结构,各层之间既相互独立又相互协调工作,如此以来便达到的高效的目的。如同设计模式中对于设计一个复杂的程序时,尽量使程序各功能之间是解耦合的一样,对于复杂的网络设计,分层设计也是很明智的一种做法。
网络分层的最本质就是每一层独立的完成一个任务而不必考虑自己任务之外的实现,而因为不同的任务因此就有了每一层所对应的不同设备。(实例到应用就是,物理层只需要关系0和1的光电信号如何传输,而对它所表达的内容毫不关心;再往上数据链路层只需要关心封装好的数据帧如何准确的送到对应的MAC地址的目的主机中,而不必关心数据报的具体内容和具体会通过何种方式光纤还是局域网…同理往上对于所有层)
应用层协议
应用层协议主要负责各个程序间的通信,发生网络传输一个数据时,先由应用层对数据按照对应的协议封装,然后交给下一层传输层,当经过一系列网络传输,数据达到接收端时,一层层的分用,最后一层再由应用层分用,最终得到数据。
DNS协议:
DNS协议是一个应用层协议,建立在TCP和UDP的基础之上,使用默认端口为53,其默认通过UDP协议通信,但如果报文过大是则会切换成TCP协议。
域名系统 (DNS) 的作用是将人类可读的域名 (如,www.baidu.com) 转换为机器可读的 IP 地址 (如,192.0.2.44),本质是通过DNS域名和IP地址的对应关系转换,而这种对应关系则保存在DNS服务器中
域名的解析过程:
域名的解析工作大体上可以分为两个步骤:第一步客户端向本地DNS服务器发起一个DNS请求报文,报文里携带需要查询的域名,第二步本地DNS服务器向本机回应一个DNS响应报文,报文里携带查询域名所对应的IP地址
具体流程如下:
- 在本地缓存中查询,如果有则返回对应IP,如果没有将请求发给DNS服务器
- 当本地DNS服务器接收到查询后,先在服务器管理区域记录中查询,若没有再在服务器本地缓存中查询,如果没有将请求发送到根域名服务器
- 根域名服务器负责解析请求的根域部分,然后将包含下一级域名信息的DNS服务地址返回给本地DNS服务器
- 本地DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域的DNS服务器地址
- 按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应的IP地址信息
- 本地DNS服务器将最终查询到的IP返回给客户端,让客户端访问对应主机
HTTP协议
HTTP协议是一个简单的请求——响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP进行通信的HTTP的实现程序。HTTP是基于TCP协议,且面向连接的。典型的HTTP事务处理有如下的过程:
- 客户端与服务器建立连接;
- 客户端向服务器提出请求;
- 服务器接受请求,并根据请求返回相应的数据作为应答响应;
- 客户端与服务器关闭连接。
HTTP协议报文格式
HTTP报文由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Respone)构成请求由请求行,请求头,请求体组成
请求行中包含请求方法、路径、版本号,请求头为多个key-value数据,请求正文包含一些请求的数据
响应由响应行,响应头,响应体组成
响应行中包含状态码,状态码描述,版本号,响应头为多个key-value数据,响应正文包含一些响应的数据
常见HTTP响应状态码汇总200 OK :客户端请求成功
3XX系列
301 Moved Permanently :请求的资源以被永久的移动到新URL中,返回的Response中包含一个Location,浏览器会自动重定向到新URL,以后请求都会被新的URL替代
302 Found :与301类似,但请求的资源只是临时的被移动到新的URL中,下次请求客户端继续使用原URL
307 Temporary Redirect : 临时重定向,类似于302,使用GET请求重定向4XX系列
400 Bad Request : 客户端请求语法错误,服务器无法理解(在 ajax 请求后台数据时比较常见)
401 Unauthorized :请求要求用户的身份认证
403 Forbidden : 服务器理解客户端请求,但是拒绝执行(一般用于用户级别为达到要求等等不支持访问)
404 Not Found : 服务器无法根据客户端请求找到对应资源
405 Method Not Allowed : 服务器不支持该方法5XX系列
500 Internal Server Error : 服务器内部错误,无法完成请求
503 Service Unavailable :由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中HTTP协议的特点
- 支持服务器/客户端模式
- 传输较快速,客户端向服务器发送请求,只需要传输请求方法和路径
- 灵活,HTTP允许传输任意类型的数据对象
- 无连接,每次连接只能处理一个请求,服务器处理完客户端请求,客户端收到响应后就断开连接
- 无状态,协议本身对事务处理没有记忆能力,如果后序连接需要之前发送的信息时就需要重传
HTTP1.0和HTTP1.1和HTTP2.0的区别:
HTTP1.0和HTTP1.1的区别:
- 长连接:HTTP1.0只支持浏览器与服务器的短连接,即每次请求都要重新建立连接,服务器无法记录每个历史请求,HTTP1.1支持长连接即在一次连接下,浏览器可以向服务器发送多次请求
- 增加Host字段:HTTP1.0中认为每个服务器都绑定这唯一一个IP,所有发送的请求头URL中没有host信息,而HTTP1.1在请求和响应中都支持了host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
- 缓存:HTTP1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。
- 错误提示:HTTP1.0中定义了16个状态码,对错误或警告的提示不够具体。HTTP1.1引入了一个Warning头域,增加对错误或警告信息的描述,并且还新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除
HTTP1.X和HTTP2.0的区别
- 增加二进制格式解析:HTTP1.X解析基于文本,而文本格式本身就具有多样性,很多场景下不方便,而引入二进制后,只有0和1组合,使解析更加方便也增强了健壮性
- 多路复用:即每个request都是是用作连接共享机制的,每个request都对应一个id,使一个连接可以有多个请求,再根据id将request归属到不同的服务端请求里
- header压缩:HTTP1.X中,每次传输都要写点header头,占用了大量数据,因此HTTP2.0在客户端和服务端各保存了一份header fields表,每次传输时只需传输header的更新信息,将header fields表更新即可实现header传输
- 服务端推送:HTTP2.0也添加了server push功能
HTTPS协议
HTTPS同样作为应用层协议,可以说它是HTTP的升级版,增加了传输数据的安全性,HTTPS协议是在HTTP的基础上增加了一个SSL外壳,HTTPS运行在SSL上,SSL运行在TCP上,对数据的加密工作就是在SSL上完成的
其保证安全性的做法是通过证书验证和对信息混合加密的方式
混合加密技术:混合加密技术:结合对称加密与非对称加密
服务端生成私钥,再通过私钥生成公钥,然后将公钥放在证书中颁发给客户端
使用公钥和私钥以非对称方式加密生成密钥
客户端接下来的传输数据中,都会用密钥以对称方式对信息加密,再传输给服务端对于,上述提到的公钥和私钥,我们规定用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开
所以HTTPS传输数据是用被密钥加密的密文和用公钥加密的私钥来保证数据安全的
HTTPS加密,只用对称加密可以吗?
不行!无法保证安全性,因为只用对称加密即只用密钥对数据加密传输的话,如果传输途中,信息被第三方劫持,获取到密钥,那接下来的传输,第三方都可以通过密钥对数据解密从而得到原始数据。HTTPS加密,只用非对称加密可以吗?两次呢?
同样不行,如果只用非对称加密。客户端每次传输数据用公钥加密,服务端再用私钥解密这一方向看似安全,但当服务端发送数据用私钥加密,客户端收到用公钥解密时,第三方劫持到信息,但可能在此之前就获得公钥,因为首次服务端向客户端发送公钥是明文传输的。
而换个角度如果使用两次非对称加密,即两组公钥,两组私钥,客户端服务端各持一组,理论上可以达到安全,但实际HTTPS并未采用,因为非对称加密耗时十分大证书:
单有混合加密技术,看似已经保证了传输的安全性,实则还是有漏洞,问题就在于服务器根本无法识别发送过来的公钥是否是自己的,如此以来在第三方劫持到数据后,自行再定义一个公钥B,并将公钥B传回给客服端,此时客户端就会利用该公钥B重新加密数据然后发送,此时第三方就可以通过自己的公钥B解密得到原始数据了。
证书就解决了这一问题,指定颁发的为CA机构,当网站使用HTTPS时,会向CA机构申请一个数字证书,证书中可以存放公钥、数据等信息,由此以来,服务端就可以通过证书来向客户端证明正确的公钥是哪一个,以此保证安全。
而对于证书,还有一些自己的放篡改机制,防止第三方获取到使用
传输层协议
传输层的主要功能是为了实现“端口到端口”的通信,以确保一条数据发送到主机上后,能够正确的传递到对应的端口上
UDP协议
UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法,但是UDP也有自己的缺陷,一旦进行通信,就不知道对方是否接收到数据了,很有可能会造成传输数据的丢包问题
特点:- 无连接:只需要知道目的ip和端口号就可以发送数据,无需建立连接
- 不可靠:没有一系列机制来应对传输数据时的丢包问题
- 面向数据报发送:应用层交给UDP什么样的报文,UDP就会发送什么样的,不会进行拆分,合并
- UDP一次传输的数据大小有限,最大64k
UDP的传输流程
UDP的适用范围:由于UDP不属于连接型协议,所以具有资源消耗小。处理速度优的特点,因此经常使用与视频、音频通话传输中,因为发送的数据较多,偶尔丢包一两个不会产生太大影响
TCP
因为上述讲到UDP的传输是不可靠的,经常会导致连接错误、数据丢包问题,针对这些问题规定了另一个传输层协议——TCP协议,TCP是一种面向连接、可靠的、基于字节流的传输层协议
TCP的特点:
- 面向连接:在传输数据是,要先建立起客户端与服务端的连接,才能进行数据传输
- 可靠的通信:TCP输出数据中,会基于内部的各种机制保证数据传输到目的端口
- 基于字节流:TCP传输数据是基于字节传输的,易于对数据的拆分与合并发送
- TCP的头部比UDP的开销要打,因为要存放更多的信息
关于TCP内部各种机制,在这里不做过多的介绍,需要博友可以参考之前的一篇博客网络原理基础
TCP与UDP的区别:
- UDP是无连接的,TCP是有连接的
- UDP是不可靠的,TCP是可靠的
- UDP面向数据报,TCP面向字节流
- UDP比TCP的传输消耗小,速度更快
这里分享一张神图,以便于更加形象的理解TCP和UDP的区别
网络层
网络层是基于数据链路层和传输层之间的第三层协议,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向传输层提供最基本的端到端的数据传送服务
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。
IP协议
IP协议是TCP/IP网络模型中的核心部分,他提供了一种分层的、无关硬件的寻址方式,可以在复杂的路由式网络中传递数据所需的服务
IP协议可以将多个交换网络连接起来,在源地址和目的地址之间传输数据包,同时它还能提供数据的组装功能,以适应不同网络对数据包大小的要求
预研知识:
IP地址:
IP地址是互联网协议特有的一种地址,它是IP协议提供的一种统一的地址格式,IP地址为互联网的每个网络和每台主机分配了一个逻辑地址,以此来屏蔽物理地址的差异IP地址的格式:
IP地址为32位地址,被分为4个部分,如XXX.XXX.XXX.XXX,IP地址又被划分为两个部分
网络号:前三部分用于标识网段,保证相互连接的两个网段有不同标识
主机号:由最后一部分组成,用于标识主机,保证处于同一网段的两台主机有不同的主机号
通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同4MAC地址:
被称为物理地址,是用来标识网络中每个设备的,MAC地址是设备出厂之后就写死的引入IP地址的目的:
在单个局域网网段中,计算机与计算机之间可以使用数据链路层提供的MAC地址进行通信
如果在路由式网络中,计算机之间就不能用MAC地址实现通信,主要是因为在路由式网络中,数据只是经过一次简单的利用两个计算机之间的MAC地址建立通信,而是需要进行多次的通信,每次跳转都会体目的主机更近一步,经历都次跳转,最终找到目的主机实现通信,而这个过程中,要知道每次向哪跳转才能更接近目的主机,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是 IP 地址IP协议数据报格式
IP协议的工作方式:
由于网络分为同网段和不同网段,所以会分成两种方式
- 同网段:如果源地址主机和目的地址主机处于同一网段,则目的IP地址被 ARP协议 解析为MAC地址后,源主机会根据目的MAC地址直接将数据包发送给目的主机
- 不同网段:
如果源地址主机和目的地址主机不处于同一网段,则数据包会经历多个过程最终发送给目的主机
1、网关(一般为路由器)的 IP地址 被 ARP协议 解析为 MAC地址,根据该 MAC地址 源主机会将数据包发送到网关
2、网关根据数据包中的网段ID找到目标网络,如果找到,将数据包发送给目标网路,如果没有则重复第一步发送到更高一级网关
3、数据包经过网关发送到正确的网段后,目标IP被 ARP协议 解析为MAC地址,在根据该 MAC地址 将数据包发送给目标地址的主机
ICMP协议
ICMP协议又叫控制报文协议,ICMP协议用于在IP 和 路由器之间传递控制消息,描述网络是否通畅、主机是否可达、路由器是否可用等网络状态,ICMP本身并不传输数据,但对于用户间数据的传递起着重要的作用
作用:
在数据包从源主机传输到目的主机的过程中,会经历一个或多个路由器,而数据包在经过这些路由器传输过程中,可能会遇到很多问题,最终导致数据包没有成功传递给目的主机。为了了解数据包在传输过程中在哪个环节出了问题,就需要用到ICMP协议,它可以跟踪数据包,并把消息返回给源主机。数据链路层
数据链路层是TCP/IP网络模型的第二层,基于物理层和网络层之间,数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层。
ARP协议
ARP协议是数据进行网络传输过程中,通过IP地址向MAC地址的转换,解决网络层和物理层衔接问题
引入ARP协议的目的:
由于 IP 地址和 MAC 地址定位方式不同,ARP 协议成为数据传输的必备协议。主机发送信息前,必须通过 ARP 协议获取目标 IP 地址对应的 MAC 地址,才能正确地发送数据包。
ARP的工作流程:
如图展示的是同一网段下的两台主机,ARP的工作流程- 主机A以广播的形式向该网段内的所有主机发送ARP请求,请求中包含了目的主机的IP地址
- 主机B接收到请求,通过请求中的目的IP地址发现自己是主机A要找的,返回响应,响应包括主机B的 MAC地址
ARP缓存:
在请求目标主机的 MAC 地址时,每次获取目标主机 MAC 地址都需要发送一次 ARP 请求,然后根据响应获取到 MAC 地址。为了避免重复发送 ARP 请求,每台主机都有一个 ARP 高速缓存。当主机得到 ARP 响应后,将目标主机的 IP 地址和物理地址存入本机 ARP 缓存中,并保留一定时间。
只要在这个时间范围内,下次请求 MAC 地址时,直接查询 ARP 缓存,而无须再发送 ARP 请求,从而节约了网络资源。
物理层
物理层,顾名思义就是用物理手段将两个要通信的电脑连接起来,主要用来传输0、1光电信号,因为这一层过于偏硬件,所以本文不做过多的赘述
整体的网络传输流程
经过以上对网络传输层中每一层理解下面我们来看看,当访问一个网页时,到底发生了什么?
主机A:发送http://www.baidu.com网络数据报
- DNS解析:将域名转换成对应IP地址(本机DNS缓存栈开始找—>逐级向上查找,如果根域服务器找不到,表示公网上没有该域名主机)
- 找到IP后:通过目的IP找到对应的目的MAC地址
- 根据目的IP计算目的主机是否和主机A处于同一网段
- 如在同网段:接通过ARP协议解析出对应的目的MAC,跳转到底9步
- 如不在同一网段:发送数据报到网关,现在ARP缓存表查找,通过网关IP查找MAC地址,找不到发送查询MAC广播数据报,最终返回网关自己的MAC
- 交换机转发:在MAC地址转换表中找到对应MAC交换机接口
- 路由器接收:分用数据报
- 途中的设备:与第7步同样操作如目的IP对应的MAC地址不是当前设备则继续重复该操作继续往更接近目的IP的路由发送
- 找到目的主机B,主机B的服务器开始接受分用请求,解析,最终组织响应
- 同上述操作一样,由主机B向主机A发送数据
- 最终主机A接受到数据报,经过分用,解析,最终得到响应
- 应用层:为用户为用户的应用进程提供网络通信服务
-
网络五层协议
2022-04-02 23:06:35网络互联模型 请求过程 网络分层目录
PPP协议(Point to Point Protocol)
区分服务(Differentiated Services Field)
DHCP(Dynamic Host Configuration Protocol)-动态主机配置协议
网络互联模型
请求过程
网络分层
一、物理层(Physical)
- 物理层定义了接口标准、线缆标准、传输速率、传输方式等 ,媒体包括架空明线、平衡电缆、光纤、无线信道等等,以及确保原始的数据可在各种物理媒体上传输,传输单位是比特
-
主要的设备和功能
- 网卡:唯一的网卡硬件地址,不能更
- 中继器:放大信号,延长数据传输距离
- 集线器:多端口中继器,为多台终端放大信号
-
数字信号、模拟信号
- 模拟信号(Analog Signal)
- 连续的信号,适合长距离传输
- 抗干扰能力差,受到干扰时波形变形很难纠正
- 数字信号(Digital Signal)
- 离散的信号,不适合长距离传输
- 抗干扰能力强,受到干扰时波形失真可以修复
- 模拟信号(Analog Signal)
-
数据通信模型
- 局域网通信模型
- 广域网通信模型
- 局域网通信模型
-
信道(Channel)
- 信道:信息传输的通道,一条传输介质上(比如网线)上可以有多条信道
- 单工通信
- 信号只能往一个方向传输,任何时候都不能改变信号的传输方向
- 比如:无线电广播、有线电视广播
- 半双工通信
- 信号可以双向传输,但必须是交替进行,同一时间只能往一个方向传输
- 比如:对讲机
- 全双工通信
- 信号可以同时双向传输
- 比如:手机(打电话,听说同时进行)
- 单工通信
- 信道:信息传输的通道,一条传输介质上(比如网线)上可以有多条信道
二、数据链路层(Data Link)
- 链路:从1个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点
- 数据链路:在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输
- 不用类型的数据链路,所用的通信协议可能是不同的(传输单位是帧)
- 广播信道:CSMA/CD协议(如果同轴电缆、集线器等组成的网络)
- 点对点信道:PPP协议(比如2个路由器之间的信道)
- 数据链路层的3个基本问题
- 封装成帧、透明传输、差错检验
-
封装成帧(framing)
- 最大传输单元MTU(Maximum Transfer Unit)
- 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
- 以太网的MTU(帧的数据部分,不包括帧首部和尾部)为1500个字节
- 在一段数据的前后分别添加首部和尾部后构成一个帧,首部和尾部的一个重要作用帧定界
-
透明传输
- 一个完整的帧只有一个帧开始符(SOH)和一个帧结束符(EOT),如果数据部分出现了SOH、EOT则需要进行转义,数据部分出现一个SOH、EOT、ESC则在它们前面加上ESC进行字节填充,当接受端的数据链路层收到该帧,如遇见头部ESC就去掉ESC
-
差错检验
- 在传输过程中可能会产生比特差错:1可能会变成0,0也可能变成1
- 在数据链路层传送的帧中,广泛使用了循环冗余检验CRC的检错技术,在发送数据后面添加冗余码(帧检测序列FCS)
- FCS是根据数据部分+数据链路层首部计算得出来的
- 假设要发送的数据M=101001(长度K=6),在发送数据的时候在后面添加一个N位的冗余码,一共发送(K+N)位数据
- FCS是根据数据部分+数据链路层首部计算得出来的
-
CSMA/CD协议
- 载波侦听多路访问(侦听道上是否有信息进行传递)/冲突检测
- 使用CSMA\CD的网络可以称为是以太网(Ethernet),它传输的是以太网帧
- 以太网帧的格式有:Ethernet V2标准(用得多)、IEEE的802.3标准
- 为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节
- 用交换机组件的网络,已经支持全双工通信,不需要再使用CSMA/CD,传输的帧依然是以太网帧
-
Ethernet V2帧的格式
- Ethernet V2帧的格式是没有帧开始符和帧结束符的,而是接收端接收帧过程之遥发现没有信号跳变,就认为帧结束
- 首部:源MAC + 目标MAC + 网络类型(IPv4或IPv6)
- 以太网帧:首部 + 数据 + FCS
- 数据的长度至少是:64 - 6 - 6 - 2 - 4 = 46字节
- 当数据部分的长度小于46字节时,数据链路层会在数据后面填充字节,接收端会将添加的字节去掉。
- 以太网帧的数据长度:46~1500字节
- 以太网帧的长度为:64~1518字节(源MAC(6)+目标MAC(6)+网络类型(2)+数据 + FCS(4))
-
网卡
- 网卡接受到帧,会进行差错校验,如果通过则接受,去掉FCS然后传输给网络层,否则丢弃
- Addresss字段:图中的值时0xFF,形同虚设,点到点信道不需要源MAC、目标MAC地址
- Control字段:图中的值时0x03,目前没有什么作用
- Protocol字段:内部用到的协议类型
- 帧开始符、帧结束符:0x7E
三、网络层(Network)
- 网络层数据包(IP数据包,Packet)由首部、数据2部分组成
- 数据:很多时候是由传输层传递下来的数据段(Segment)
-
网络层首部
-
版本(Version)
- 占4位,0b0100:IPv4、0b0110:IPv6
-
首部长度(Header Length)
- 占4位,二进制*4才是最终长度
- 0b0101:5*4=20(最小) 、 0b1111:15*4=60(最大),固定20字节+可变40字节
-
区分服务(Differentiated Services Field)
- 占8位,可以用于提高网络的服务质量(Qos)
-
总长度(Total Length)
- 占16位,首部 + 数据部分的长度之和。最大值是65535
- 占16位,首部 + 数据部分的长度之和。最大值是65535
-
标识(Identification)
- 占16位,数据包的ID,当数据包过大进行分片时,统一数据包所有片标识都是一样的
- 有一个计算器专门管理数据包的ID,每发出一个数据包,ID就加1
-
标志(Flags)
- 占3位,第1位(Reserved Bit):保留
- 第2位(Don't Fragment):1代表不允许分片,0代表允许分片
- 第3位(More Fragments):1代表不是最后一片,0代表最后一片
-
片偏移(Fragment Offset)
- 占13位,片偏移*8=字节偏移,每片长度一定是8的整数倍
- 占13位,片偏移*8=字节偏移,每片长度一定是8的整数倍
-
生存时间(Time To Live,TTL)
- 占8位
- 每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器回返回错误报告
- 用ping命令后的TTL,能够推测出对方的操作系统、中间经过了多少个路由器
-
首部检验和、协议
-
四、传输层 (Transport)
- 传输层的数据长度 = 网络层的总长度 - 网络层的首部长度 - 传输层的首部长度
- 传输层有2个协议
- TCP(Transmission Control Protocol),传输控制协议
- UDP(User Datagram Protocol),用户数据报协议
-
UDP协议
-
UDP - 数据格式
- UDP是无连接的,减少了建立和释放连接的开销
- UDP尽极大能力交付,不保证可靠交付
- 不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)
- UDP长度:占16位,首部的长度(8字节) + 数据的长度
-
UDP - 检验和(Checksum)
- 检验和的计算内容:伪首部(12字节) + 首部(8字节) + 数据
- 伪首部:仅在计算检验和时起作用,并不会传递给网络层
-
UDP - 端口(Port)
- UDP首部中端口是占用2字节,取值范围:0~65535
- 客户端的源端口是临时开启的随机端口
- 防火墙可以设置开启\关闭某些端口来提高安全性
- 常用命令行
- netstat -an:查看被占用的端口
- netstat -anb:查看被占用的端口、占用端口的应用程序
- telnet主机端口:查看是否可以访问主机的某个端口
-
TCP协议
-
TCP - 数据格式
-
数据偏移
- 占4位,取值范围:0x0101~0x1111
- 数据偏移 * 4 = 首部长度(Header Length) 【包括选项(长度可变)和填充部分】
-
保留位(Reserved)
- 占6位,目前全为0
-
标志位(Flags)
- 占6位(URG、ACK、PSH、RST、SYN、FIN)
- URG=1:紧急指针字段才有效,表明当前报文段中有紧急数据,应优先传送
- ACK=1:确认号字段才有效
- PSH=1:通知缓冲区,数据进入缓冲区,只要数据完整的接受完后立即交付给上层应用
- RST=1:表明连接总出现严重差错,必须释放连接,然后再重新建立连接
- SYN=1、ACK=0:表明这是一个建立连接的请求
- 若对方同意连接,则回复SYN=1、ACK=1
- FIN=1:表明数据已经发送完毕,要求释放连接
- 占6位(URG、ACK、PSH、RST、SYN、FIN)
-
检验和(Checksum)
- 伪首部+首部+数据,伪首部占用12字节,仅在计算检验和时起作用,不会传递给网络层
-
序号(Sequence Number)
- 占4字节,在传输过程的每一个字节都会有一个编号
- 在建立连接后,序号代表:这一次传递对方的TCP数据部分的第一个字节的编号
- 占4字节,在传输过程的每一个字节都会有一个编号
-
确认号(Acknowledgment Number)
- 占4字节,确认号代表:期望对方下一次传过来的TCP数据部分的第一个字节的编号
-
窗口(Window)
- 占2字节,字段有流量控制功能,用告知对方下一次允许发送的数据大小(字节为单位)
-
TCP要点
-
五、应用层(Application)
-
常见协议
- 超文本传输:HTTP、HTTPS
- 文件传输:FTP
- 电子邮件:SMTP、POP3、IMAP
- 动态主机配置:DHCP
- 域名系统:DNS
-
域名(Domain Name)
- IP地址不方便记忆,并且不能表达组织的名称和性质,人们设计出域名(如baidu.com)
- 为了能够访问到具体的主机,最终还是得知道目标主机的IP地址
- 域名申请注册:https://wanwang.aliyun.com
- 全程直接用域名,不用IP地址也不行
- IP地址固定4个字节,域名至少10几个字节,回增加路由器的负担,浪费流量
- 根据级别不同,域名可以分为:顶级域名、二级域名、三级域名等
- IP地址不方便记忆,并且不能表达组织的名称和性质,人们设计出域名(如baidu.com)
-
顶级域名的分类
- 通用顶级域名(gTLD)
- .com(公司)、.net(网络机构)、.org(组织机构)、.edu(教育)、.gov(部门)等
- 国家及地区顶级域名(ccTLD)
- .cn(中国)、.jp(日本)、.uk(英国)
- 新通用顶级域名(New gTLD)
- .vip、.xyz、.top、.clud、.shop等
- 通用顶级域名(gTLD)
-
二级域名
- 指顶级域名之下的域名
- 在通用顶级域名下,一般指域名注册人的名称,如:google、baidu、microsoft等
- 在国家及地区顶级域名下,一般指注册类别,如:com、edu、gov、net等
- 指顶级域名之下的域名
-
DNS(Domain Name System)- 域名系统
- 利用DNS协议,可以将域名(baidu.com)解析成对应的IP地址(如:220.181.38.148)
- DNS可以基于UDP协议,也可以基于TCP协议,服务器占用53端口
- DNS - 服务器
- 客户端先访问最近的一台DNS服务器(客户端自己配置的DNS服务器)
- 所有的DNS服务器都记录了DNS根域名服务器的IP地址
- 上级DNS服务器记录了下一级DNS服务器的IP地址
- 全球一共13台IPv4的DNS根域名服务器、25台IPv6的DNS根域名服务器
- DNS - 常见命令
- ip config /displaydns:查看DNS缓存记录
- ip config /flushdns:清空DNS缓存记录
- ping 域名
- nslookup:域名
-
IP地址的分配
- IP地址按照分配方式,可以分为:静态IP地址、动态IP地址
- 静态IP地址
- 手动设置
- 适用场景:不怎么挪动的台式机(比如学校机房中的台式机)、服务器等
- 动态IP地址
- 从DHCP服务器自动获取IP地址
- 适用场景:移动设备、无线设备等
- 静态IP地址
- IP地址按照分配方式,可以分为:静态IP地址、动态IP地址
-
DHCP(Dynamic Host Configuration Protocol)-动态主机配置协议
- DHCP协议基于UDP协议,客户端是68端口,服务器是67端口
- DHCP服务器会从IP地址池中,挑选一个IP地址“出租”给客户端一段时间,过期回收
- 平时家里上网等路由器就可以充当DHCP服务器
-
DHCP - 分配IP地址的4个阶段
- DISCOVER:发现服务器
- 发广播包(源IP是0.0.0.0,目标IP是255.255.255.255,目标MAC是FF:FF:FF:FF:FF:FF)
- OFFER:提供租约
- 服务器返回可以租用的IP地址,以及租用期限、子网掩码、网关、DNS等信息
- 可能会有多个服务器提供租约
- REQUEST:选择IP地址
- 客户端选择一个OFFER,发送广播包进行回应
- ACKNOWLEDGE:确认
- 被选中的服务器发送ACK数据包给客户端,至此,IP地址分配完毕
- DISCOVER:发现服务器
-
DHCP - 4个阶段
-
DHCP - 细节
- DHCP服务器可以跨网段分配IP地址吗?(DHCP服务器、客户端不在同一个网段)
- 可以借助DHCP中继代理(DHCP Relay Agent)实现跨网段分配IP地址
- 自动续约
- 客户端会在租期不足的时候,自动向DHCP服务器发送REQUEST信息申请续约
- 常用命令
- ipconfig /all:可以看到DHCP相关的详细信息,比如租约过期时间、DHCP服务器地址等
- ipconfig /release:释放租约
- ipconfig /renew:重新申请IP地址、申请续约(延长租期)
- DHCP服务器可以跨网段分配IP地址吗?(DHCP服务器、客户端不在同一个网段)
-
网络协议-基础知识(笔记)
2021-10-26 19:27:32这一切都是由网络协议来规定的。没有网络协议,就没有今天的互联网 为什么要学习网络协议 互联网、移动互联网、物联网,都离不开网络协议 最熟悉的网络协议:HTTP 为了满足各种需求,有各式各样的网络协议(HTTPS、...互联网
互联网的出现,彻底改变了人们的生活方式,足不出户就可以购物、聊天、看电影、买车票、上班等
思考:数据是如何从一个设备传递到另一个设备的?
这一切都是由网络协议来规定的。没有网络协议,就没有今天的互联网
为什么要学习网络协议
互联网、移动互联网、物联网,都离不开网络协议
最熟悉的网络协议:HTTP
为了满足各种需求,有各式各样的网络协议(HTTPS、SMTP、MQTT、RTMP等)随着物联网、音视频、直播等领域的发展,企业提高对开发人员网络基本功的要求,经常问网络协议的面试题
TCP和UDP的区别?说一下它们的报文格式?
TCP的流量控制和和拥塞控制?TCP如何实现可靠性传输?
为什么连接是3次握手,关闭是4次挥手?
7层模型与4层模型的区别?每一层的作用是什么?
交换机与路由器的区别?
…学习中需要搭建的环境
客户端-服务器开发环境
客户端:浏览器(HTML+CSS+JS)
服务器:Java网络抓包
浏览器(Chrome、Firefox)、Fiddler、Wireshark模拟工具
Xshell(只有Windows版)、Packet Tracer(注册地址)、GNS3客户端-服务器
tomcat是由java开发的,所以需要包含在jvm里面,而jvm是Java Virtual Machine(Java虚拟机),用来运行java代码的,最终包含在服务器里面,与客户端进行数据的交互。
Java 的跨平台原理
如果一个代码可以在多个平台运行,那么就是跨平台
JVM(Java Virtual Machine):Java虚拟机
Java的跨平台:一次编译,到处运行
编译生成跟平台无关的字节码文件(calss文件),*.class 是字节码文件,操作系统是不会执行的
*.class由对应平台的JVM解析字节码为机器指令(010101)
如果代码有语法错误,将编译失败,并不会生成字节码文件
那就不会去运行一个JVM程序。最后导致Java程序运行失败C\C++ 的跨平台原理
C\C++ 的跨平台:使用平台相关的编译器生成对应平台的可执行文件,在各个平台上有对应的编辑转化器,转成操作系统可以运行的格式
什么是协议
如果租房协议有一个国家(或国际)标准,会是怎样?
全世界统一标准,服务器可以知道客户端需要什么,客户端可以知道服务器返回了什么。网络互连模型
为了更好地促进互联网络的研究和发展,国际标准化组织 ISO 在 1985 年制定了网络互连模型
OSI 参考模型(Open System Interconnect Reference Model),具有7层结构请求过程
客户端由应用层从上到下逐一的封装,服务器由物理层从下到上逐一的拆分。
网络分层
计算机之间的通信基础
需要得知对方的IP地址
最终是根据MAC地址(网卡地址),输送数据到网卡,被网卡接收
如果网卡发现数据的目标MAC地址是自己,就会将数据传递给上一层进行处理
如果网卡发现数据的目标MAC地址不是自己,就会将数据丢弃,不会传递给上一层进行处理单工,半双工和全双工有何区别和联系
1.单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。
2.半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。
3.全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,举例:电话通信。计算机之间的连接方式
计算机之间的连接方式-网线直连
需要用交叉线(不是直通线)
计算机之间的连接方式-同轴电缆(Coaxial)
◼ 半双工通信
◼ 容易冲突
◼ 不安全
◼ 中间断了,整个都瘫了
计算机之间的连接方式-集线器(Hub)
半双工通信
容易冲突
不安全
跟同轴电缆一样:没有智商计算机之间的连接方式-网桥(Bridge)
思科网络模拟机相关命令:
arp -a 查看arp缓存表
arp -d 清除qrp缓存表
能够通过自学习得知每个接口那侧的MAC地址
从而起到隔绝冲突域的作用:因为网桥会根据自己所缓存的arp表判断是否放行数据包
计算机0ping计算机1过程(计算机0未知计算机1的MAC地址):
1、先通过ARP发送一个MAC地址为FFFF-FFFF-FFFF-FFFF的广播包寻找计算机1的MAC地址,通过集线器转发到计算机2和网桥
2、计算机2发现不是自己的ip地址,丢弃,而且不会记录计算机0的MAC地址
3、网桥得到了广播包,记录了计算机0的MAC地址,然后转发给计算机1
4、计算机1发现是自己的ip地址,接受并记录了计算机0的MAC地址与IP地址的映射
5、然后发现ARP广播包回去
6、计算机0接受到arp广播包后,确认计算机1已经收到了自己发的包,然后发送ICMP包再次确认计算机之间的连接方式-交换机(Switch)
相当于接口更多的网桥
全双工通信
比集线器安全
思考
全球所有的设备都用交换机连接会是什么情况?
会导致很多计算机同时发送ARP包,造成广播风暴计算机之间的连接方式-路由器(Router)
ping过程:
计算机0 ping 计算机1
计算机0发现计算机1的网段与自己不在同一个网段,然后没有设置网关,所以不进行任何操作
计算机6 ping 计算机1
1、计算机0发现计算机1的网段与自己不在同一个网段,然后设置了网关,所以将arp包的目的ip地址变成网关的ip地址,然后进行广播
2、通过集线器发送到路由器,路由器发现目的ip地址是自己的端口网关,接受后返回自己接口的mac地址,然后发arp包给回计算机0
3、计算机0得到网关的mac地址,然后发送icmp包(目的mac地址是网关接口的mac地址)给计算机1注意
网线直连、同轴电缆、集线器、网桥、交换机
连接的设备必须在同一网段,连接的设备处在同一广播域
集线器、网桥、交换机不关心ip地址,只关心MAC地址
路由器可以在不同网段之间转发数据,而且只能是不断网段,因为是隔绝广播域的笔记内容大部分来自于小码哥教育
-
网络协议与攻击模拟
2022-03-28 15:24:38网络协议与攻击模拟 一、协议 TCP/IP协议簇 1、协议 网络接口层 物理层 数据链路层 网络层:IP协议(v4/v6) ARP(地址解析) RARP ICMP(控制报文协议) IGMP 传输层:TCP(传输控制协议) UDP(用户数据报... -
计算机网络(一):网络层次划分及各层的网络协议
2020-05-07 11:24:26原文链接:网络层次划分及网络协议 1 OSI七层模型、TCP/IP四层模型、TCP/IP五层模型 不管是OSI七层模型还是TCP/IP的四层、五层模型,每一层中都要自己的专属协议,完成自己相应的工作以及与上下层级之间进行沟通。 ... -
TCP/IP网络协议详解
2021-03-30 18:54:59一、 计算机网络体系结构分层 一图看完本文 计算机网络体系结构...从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 I. -
各种网络协议的类型、优缺点、作用
2020-04-03 09:59:36一、网络协议的定义 ● 网络协议是一种特殊的软件,是计算机网络实现其功能的基本机制 ● 网络协议的本质是规则,即... -
网络协议面试题整理
2022-03-13 21:30:13服务端收到 FIN 报文,会发送 ACK 报文,客户端序号加 1. 服务端处于 close_wait 状态。 服务端断开连接,发送 Fin 报文,处于 last_ack 状态。 客户端收到 Fin 报文,发送 ack,处于 time_wait 状态。 -
网络协议
2020-02-05 01:23:34一、简述OSI的七层及TCP/IP五层(网络模型) OSI( Open System ...TCP/IP五层协议和OSI的七层协议对应关系如下 在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层;一般的路由器是工作... -
网络安全:WireShark 抓包及常用协议分析
2022-04-11 19:46:00网络安全:WireShark 抓包及常用协议分析 -
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络...
2022-03-05 08:34:32网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解 -
OSI七层网络协议及TCP/UDP、C/S架构详解
2022-03-25 19:12:26OSI七层网络协议及TCP/UDP详解一、OSI七层网络、Linux四层网络模型1、为什么需要网络通信2、通讯设备有哪些3、什么是通信协议?作用是什么?二、OSI七层协议1、物理层 一、OSI七层网络、Linux四层网络模型 1、为什么... -
常见网络协议
2019-03-26 13:32:50一、网络协议 二、TCP(Transmission Control Protocol,传输控制协议) TCP头格式 TCP协议中的三次握手和四次挥手 TCP报文抓取工具三、... -
实践三 网络嗅探与协议分析
2022-03-28 18:50:3820212806 2021-2022-2 《网络攻防实践》第3周作业1.实验内容(知识总结)2.实验过程3.学习中遇到的问题及解决4.学习总结参考资料 1.实验内容(知识总结) 网络嗅探 (1)定义 &... -
Linux 网络协议栈开发(一)—— 网络协议栈内核分析
2018-01-14 14:50:03应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的。Linux Socket 是从 BSD Socket 发展而来的,它是 Linux 操作系统的重要组成部分之一,它是网络应用程序的基础。从... -
网络协议:tcp三次握手和四次挥手
2022-03-31 20:49:30第一次握手:客户端将标志位SYN设置为1,并且随机...第三次握手:客户端接收到确认之后,检查ack是否是x+1,ACK是否是1,如果都是正确的,会将标志位ACK设置为1,确认号ack设置为y+1,发送给服务端 第一次挥手:客户. -
计算机网络 | 一文搞懂什么是TCP/IP协议
2019-10-28 12:48:16计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件,操作系统之间的通信,所有这一切都... -
常用网络协议简介
2018-03-17 15:35:03常用网络协议简介 作者:caoshen_vip 1.TCP协议 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,由IETF的RFC 793说明(specified)。TCP在IP报文... -
计算机网络 ARP协议全面实验分析讲解
2021-11-28 12:24:28本实验感谢计嵌老大哥LYJ的帮助 目录 ☀️|一、实验原理 ☀️|二、实验环境 ...⭐️ARP协议的作用?数据报如何封装传输? ⭐️图中ARP报文首部包括哪些字段? ☀️|一、实验原理 掌握ARP协议的报文格式 掌... -
【网络协议】TCP/IP 协议
2022-03-04 00:32:01TCP/IP 协议模型,包含了一系列构成互联网基础的网络协议,是 Internet 的核心协议。 基于 TCP/IP 协议栈可分为四层或五层,转换为 OSI 参考模型,可以分为七层,分别如下图所示: 通常我们所说的都是基于 TCP/TP ... -
网络协议与攻防复习
2022-04-03 19:46:042.内部网关协议RIP是一种广泛使用的基于( )的协议。 A 集中式路由算法 B 距离矢量算法 C 固定路由算法 D 链路状态算法 3.为了提高传输效率,TCP通常采用 ( )。 A .三次握手法 B .端口机制 C .窗口控制机制 D ... -
计算机网络11种协议报文格式
2021-11-18 19:27:1911种协议报文格式 -
计算机网络四层协议及其作用
2018-09-29 22:50:11四层协议 1. 数据链路层 1.1 作用 ... (2) 网络驱动程序隐藏了不同物理网络的不同电气特性,为上层协议提供一个统一的接口 1.2 协议应用 ARP和RARP(Reverse Address Resolve Protoc... -
面试题:主要关于网络协议(重点)
2018-04-29 13:17:17https://blog.csdn.net/u012036171/article/details/47791177今天主要是网络线程方面的,内容有点多慢慢记。。。但是是面试中非常重要的知识点。所以需要多加记忆和理解。1.OSI七层模型,每一层的功能 (osi开放式... -
网络协议杂谈(一)
2021-12-14 15:57:51本篇笔记记录各种网络协议的原理以及一些逻辑问题,同时也会对网络协议特征的记忆方法进行整理,其中包括使用各种网络协议时会遇到的各种问题及原理,实际操作和解决办法会在下一篇笔记中记录。 -
以太网学习(2)-- 网络协议简介
2022-03-20 10:48:31TCP/IP是一个协议族,是一个多层协议系统,每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。。对于开发人员听到最多就是就是应用层协议,比如HTTP、FTP、MQTT等。 TCP/IP是一个庞大... -
网络协议的类型、优缺点、作用
2018-04-01 09:36:05一、网络协议的定义 ● 网络协议是一种特殊的软件,是计算机网络实现其功能的基本机制 ● 网络协议的本质是规则,即各种硬件和软件必须遵循的共同规则 ● 网络协议并不是一套单独的软件,他融合于其他所有... -
TCP/IP协议、网络IO编程(BIO/NIO)
2022-04-12 21:54:08IP网络协议是tcp/ip协议中非常重要的协议,它一般用来确定网络中唯一的一台计算设备。TCP协议是一个面向连接的可靠的协议,TCP通过三次握手建立连接和四次挥手关闭连接,通过带重传机制的肯定确认来确保数据的可靠性... -
【搞定网络协议】之网络协议面试题整理
2018-11-28 14:45:52一 OSI与TCP/IP各层的结构与功能,都有哪些协议 二 TCP三次握手和四次挥手(面试常客) 三 TCP、UDP协议的区别 四 TCP协议如何保证可靠传输 五 在浏览器中输入url地址 ->> 显示主页的过程(面试常客) 六 ...