IPV4

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IPV4相关的知识,希望对你有一定的参考价值。

源IPv4地址:发送数据的主机上配置的IP地址

源IPv4的配置方式:

  手动配置:直接向网卡的配置文件中添加我们认为合法的IP地址

  特点:地址分配精确;容易发生手误导致主机无法接入网络;管理员重复工作量很大

  自动配置:没有IP地址的计算机,通过某种特定协议向其他能够提供IP地址的计算机进行通信,并获得IPv4地址

协议

  BOOTP:启动协议;利用RARP协议向全网广播获取IP地址的需求;BOOTP服务器会从其地址池中选择一个IPv4地址,永久归这台主机使用

BOOTP(Bootstrap Protocol,引导程序协议)是一种引导协议,基于IP/UDP协议,也称自举协议,是DHCP协议的前身。

  DHCP:动态主机配置协议; 地址租借规划;每一个地址都有租约的期限;

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,

续租的规则:

  当租约期限过去50%时,客户端联系服务器进行地址续租;如果续租不成功,客户端会连续尝试3次;当租约期限过去87.5%时,客户端会放弃IP地址;重新广播是否有其他服务器能够让其使用其继续使用之前的IP地址; 一直等到租约到期,客户端IP地址彻底被释放,客户端将试图从其他的服务器获得其他的IP地址以连接网络

DHCP地址的租借过程——四线会话:

 1.客户端广播发送DHCP Discover消息以确定网络中是否有DHCP服务器能为本机提供IP地址;

 2.服务器收到DHCP Discover消息后,会检查自己的地址池,如果仍然有可用的IP地址,就从中现则一个IP地址,向客户端广播发送DHCP Discover消息

 3.客户端将收到的第一个DHCP Offer消息中的IP地址作为可选择IP地址,向网络中广播DHCP Request消息,通知服务器,选定这个IP地址作为本次通信的IP地址

 4.提供IP地址的服务器收到DHCP Request消息后,将IP地址和对应的主机的物理地址临时绑定;并且开始租约计时;给客户端发送DHCP ACK消息,不是提供该IP地址的服务器收到DHCP Request,将刚刚提供的IP地址重新放入到地址池中,并给客户端发送DHCP NAk消息

目的IP地址如何给出

 手动指定:直接在地址栏中手动书写目的主机的IP地址

 自动解析:

  DNS协议:域名系统协议

   在DNS服务器上,保存着特定的域名和IP地址的映射关系,可以完成地址解析任务;

  地址解析

   正向地址解析:

    通过域名获得其对应的IP地址的过程

   反向地址解析:

    通过IP地址反解其域名的过程 

传输层:

 OSI第四层:端到端的连接

 TCP/IP第三层:

 TCP协议:传输控制协议

 UDP协议:用户数据报协议

(1) UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

(5)UDP使用尽最大努力交付即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。

(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

技术分享

UDP协议的首部格式

 端口:逻辑端口,或协议端口,他是应用层和传输层之间的通信接口;

 端口是由16位二进制构成的数字标识;其范围是0~65535;

 其中:

 0:表示全部端口号,不能单独使用;

 1~1023:保留端口号,

 1024~64511:动态分配端口,

 64512~65535:注册端口,

 ssh:TCP/22

 http: TCP/80

 https:TCP/443

 SMTP:TCP/25

 POP3:TCP/110

 DHCP:UDP/67(Server服务器) UDP/68(Client客户端)

 DNS:UDP/53  TCP/53

Linux类系统中: /etc/services

Windows系统中:C:\Windows\System32\drivers\etc\services

这类文件中,保存了应用层协议和传输层协议之间的默认的通信接口映射关系

 源端口:16bits,发送方在封装数据的时候选择的端口号;一般来讲,客户端发送的数据的源端口号式随机选择的空闲端口;

 目的端口:16bits,此次数据通信的接收方在传输层向应用层进行数据传递时所必须使用的端口号,一般来讲,数据的目的端口式固定的

注意:

 1.一般来讲,一次往返通信过程中,两组数据的端口号会互换;

 2.使用端口时,更加在意目标端口的准确性;如果因为目标端口不明确而导致接收方无法使用正确的程序来处理数据,则数据会直接被传输层协议丢弃

数据长度:16bits,整个UDP数据报的报文长度,包括首部;

数据校验和:16bits,整个UDP数据报

传输层协议

 TCP协议:

 TCP特点

 TCP/IP 协议栈的传输层

 为应用程序访问的网络层

 面向连接的协议

 全双工模式运行

 错误检查

 数据包序列化

 接收确认

 数据恢复功能

技术分享

1.源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个。

2.序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始。那如何区分两个相同序列号的不同TCP报文段就是一个问题了,后面会有答案,暂时可以不管。

3.确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号。也就是告诉发送方:我希望你(指发送方)下次发送给我的TCP报文段的序列号字段的值是这个确认号。

4.TCP首部长度:由于TCP首部包含一个长度可变的选项部分,所以需要这么一个值来指定这个TCP报文段到底有多长。或者可以这么理解:就是表示TCP报文段中数据部分在整个TCP报文段中的位置。该字段的单位是32位字,即:4个字节。

URG:表示本报文段中发送的数据是否包含紧急数据。URG=1,表示有紧急数据。后面的紧急指针字段只有当URG=1时才有效。

ACK:表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1。

PSH:告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1,则表示对方应当立即把数据提交给上层,而不是缓存起来。

RST:只有当RST=1时才有用。如果你收到一个RST=1的报文,说明你与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明你上次发送给主机的数据有问题,主机拒绝响应。

SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1。

FIN:标记数据是否发送完毕。如果FIN=1,就相当于告诉对方:“我的数据已经发送完毕,你可以释放连接了”

5.窗口大小:表示现在运行对方发送的数据量。也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量。

6.校验和:提供额外的可靠性。具体如何校验,参考其他资料。

7.紧急指针:标记紧急数据在数据字段中的位置。

8.选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,那么选项部分最长为:(2^4-1)*4-20=40字节。

选项部分的应用:

MSS最大报文段长度(Maxium Segment Size):指明数据字段的最大长度,数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS值指示自己期望对方发送TCP报文段时那个数据字段的长度。通信双方可以有不同的MSS值。如果未填写,默认采用536字节。MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中。

窗口扩大选项(Windows Scaling):由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项。

SACK选择确认项(Selective Acknowledgements):用来确保只重传缺少的报文段,而不是重传所有报文段。比如主机A发送报文段1、2、3,而主机B仅收到报文段1、3。那么此时就需要使用SACK选项来告诉发送方只发送丢失的数据。那么又如何指明丢失了哪些报文段呢?使用SACK需要两个功能字节。一个表示要使用SACK选项,另一个指明这个选项占用多少字节。描述丢失的报文段2,是通过描述它的左右边界报文段1、3来完成的。而这个1、3实际上是表示序列号,所以描述一个丢失的报文段需要64位即8个字节的空间。那么可以推算整个选项字段最多描述(40-2)/8=4个丢失的报文段。

时间戳选项(Timestamps):可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文。

NOP(NO-Operation):它要求选项部分中的每种选项长度必须是4字节的倍数,不足的则用NOP填充。同时也可以用来分割不同的选项字段。如窗口扩大选项和SACK之间用NOP隔开。

连接建立

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。

技术分享TCP的三次握手

TCP三次握手的过程如下:

  1. 1)发送方生成一个TCP首部数据,在首部中,源、目的端口有应用层协议给出;序列号为随机选择,确认号为0,标志位SYN置1;

  2.   2)接收方收到由发送方发来的SYN请求数据之后,判断自身能否完成对方所要的数据通信;如果可以则返回一个由其生成的TCP首部数据;源、目的端口与之前的数据正好相反,序列号随机,确认号为对方下一个数据的序列号,SYN和ACK两个标志位置1

  3.   3)发送方在接受对方的相应数据之后,检查其ACK标识位是否置1;如果为1再看SYN标志位是否置1,如果也是1就予以确认,随机生成第二个TCP首部数据;序列号为前一个数据的序列号+1,确认号为接收方下一个数据的序列号;ACK标志位置1;

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

连接终止

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。

技术分享TCP连接的终止

1)当所有的数据传输结束之后,有一方主动向另一方发送一个FIN标志位置1的TCP首部数据

2)另一方收到这样的FIN标志位置1的数据后,回应一个ACK标志位置1的确认数据

3)另一方主动发出一个FIN置1的TCP首部数据,请求拆除连接

4)主动结束予以确认,发送ACK置1的TCP首部数据

TCP协议的流量控制特性

 被动流量控制: 拥塞窗口

  由于收发双方的网络资源不均衡或不对等造成的网络拥塞,导致接收方数据缓冲区溢出,使得大量的数据丢失,有数据方发送一个窗口大小为0的确认数据段给发送方,以暂停发送方的数据发送

 主动流量控制:滑动窗口  

  每一次双方互相通信时,都会协商窗口大小,以最小窗口为标准,发送方安照这样的窗口大小进行数据发送;

TCP协议的确认特性

 1.在发送方尚未接收到来自接受方的确认信息之前,不会继续发生后续数据

 2.如果在一定的超时时间之内,发送方没有收到接收方发送过来的确认信息,发送方会重新传输之前发送过的数据

通过确认特性能够保证数据的可靠性传输

数据通信过程描述——双机互连

 1.如果用户在应用程序中没有指定目标IP地址,则应用程序会自动向DNS服务器发出查询请求,以获得对应的目标主机的IP地址;

 2.当前应用程序所需要使用的传输层的哪个协议?选择了TCP进行进一步封装。

 3.传输层并不马上为应用层发送数据,而是由TCP协议自行生成数据段首部,通过三次握手建立TCP连接;

 4.IP协议会按照正确的地址和对应格式完成数据封装,但是网络访问层需要通过MAC地址完成数据传输,因此需要查询ARP缓存中是否有对应该IP地址的MAC地址记录;

 5.如果未找到该记录,TCP三次握手请求,将暂存内存;有ARP协议生成ARP请求数据包,以广播的方式发送出去;目标主机收到后,会先将源主机的MAC地址缓存下来,然后将自己的IP地址和MAC当作数据封装并以单播返回源主机;

 6.源主机缓存目的主机的MAC地址,而后将TCP三次握手的请求封装并予以发送;

 7.当TCP连接正确建立之后,就可以为应用程序发送数据到目的主机;

 8.对于每一批次的TCP报文,目的主机都必须予以确认;

 9.当所有数据报文发送完成后,通过四次挥手拆除TCP连接


以上是关于IPV4的主要内容,如果未能解决你的问题,请参考以下文章