听说你还不会?一文说清IP协议,ARP协议与HTTP协议

1.IP地址与MAC地址

MAC地址由于已经固化在网卡的ROM中,又叫硬件地址或物理地址。MAC地址是数据链路层使用的地址。IP地址是网络层及以上层使用的地址。

02876689cd1e447b9714d384eac2e1c9.png

上图是发送方接收方各层报文结构的变化情况

可见,经过不同转发设备,MAC帧首部的

源MAC地址

和目标MAC地址总是更新。但IP地址保持不变

,即IP目标地址始终为主机2的IP地址,源地址始终为主机1的。

67dac5bd41b345a0a74c2c0d49dd8279.png

上图是报文转发过程中MAC帧变化情况

2.地址解析协议ARP

通过IP地址找到相应的MAC地址。

由于一些情况,使主机MAC地址发生变化,比如更改了网络适配器(主机MAC地址即其网络适配器的地址),撤走了一些主机等,为了应对这些情况,因此我们在每个的ARP高速缓存中存放一个IP地址到MAC地址的映射表,动态更新其数据。

当想向一台主机发送数据时,可以看看自己ARP表中是否有目标地址IP地址,有的话则找见对应的MAC地址,将其写入MAC帧中,要是没有呢?

或者更极端的,一开始该表是空的,

e5f342b78a6646bfa5ebbd4905c8b513.jpg

 

(1)那么该表所在的设备自动运行ARP进程,广播(向该网络其余所有主机和服务器发送)一个ARP请求分组。消息的内容是:写明自己(发送方)的IP地址与MAC地址(即发送方IP地址到MAC地址映射),寻找目标IP地址对应的MAC地址。

(2)接收方如果ARP分组中有目标IP地址,就收下该消息,并且将发送方IP地址到MAC地址映射写入自己ARP表中,同时回送响应消息,消息中附带自己的MAC地址。该为单播(一对一发送)。如果没有则不理会。

(3)发送方收到回应后,写入ARP表中。

下次在查找时,如果在ARP表查到,无须广播了。

ARP表每个项目都有生存时间,如果超时会自动删掉,减少出错几率,比如一台主机MAC地址变动了,但别人缓存表的MAC地址还是原来的,出现尴尬。

3.IP数据报形式:IPV4

由首部和数据部分构成。

(1)首部宽度为32位;

首部可变部分:1-40字节不等;

首部固定部分:20字节。

(2)数据部分

3b70e198ff0e41259ae202414328032e.png

(3)固定部分各字段:

版本:占四位。IP版本通信双方的要一致。

首部长度:4位。

区分服务DS(differentiated services):8位。

总长度:首部和数据之和长度,共16位。

MTU:(maximum transfer unit)最大传送单元。即数据链路层每种协议规定的数据字段最大长度。数据报总长度不能超过该值。

IP协议规定:互联网中所有主机和路由器必须接收长度不超过576字节的数据报,假设上层交下来数据长度512字节,最大IP头部长度60字节,再加上4字节的富余。

标识identification:需要分片时,该字段的值被复制到每一个子片头部,相同值的标识使分片后的数据报组成原来数据报。

标志flag:占三位,目前只有最低位和中间位有意义,

c3c0c178e2c1433d84e634b8aa68eac1.jpg

 

中间位:DF(don't fragment),为1时代表不能分片

最低位:MF(more fragment),为1时代表还有分片。

片偏移:占13位,分片后的子片在原片相对位置,即相对于原片起点,该片从何处开始。

片偏移以8个字节为偏移单位,即即相对于原片起点,该片从开始位置/8的值作为片偏移值。

最差情况是只有最后一个分片长度不足8字节(少了)。

举例:

f0f60514ebf5430eabc8b9b3ef96c810.png

一个数据报总长3820字节;

固定首部长度20字节;

每个分片数据部分长度不超过1400字节。

分为3个数据片,数据部分长度分别为为1400字节,1400字节和1000字节。

注意片偏移量从0开始,因为片偏移是原分组的相对位置,开始并没有偏移,所以为0;

生存时间TTL(time to live):8位,防止报文循环或者长时间转发浪费资源。最初以秒为单位,后来将其改为跳数,转发过程中每经过一个设备,就将其值减去1,直到为0,丢弃;最大值是8位都为1,即2^8-1(二进制从最低位为2^0开始,8位都为1的下一位(加1)是第九位为1,即用2^8-1得到前一个数值)

23d1c56a22704b468f794babdb241d4c.jpg

 

首部检验和:占16位,每经过一个路由器,都要重新计算校验和,检查首部字段的值是否发生变化。

采用下列方法计算:

(1).将IP数据报按16位划分,开始16位检验和字段为0,然后将所有16位反码运算相加后,最后将得到的和取反码,写入校验和字段中;

(2).接收方将收到的数据报首部所有字段再按16位划分,反码运算相加一次,得到的值取反码,得到接收方的检验和计算结果。

(3).若首部不变,结果计算为0,保留即可,否则丢弃。

8fc11172f0de4e47aab247d0ffdf00c1.png

网际报文控制协议

HTTP协议定义了客户端和服务器交互内容与步骤。

首先,客户端向服务器发送请求消息,请求消息中包含了”对什么“和“进行何种操作”两个部分内容,“对什么”部分为URL,一般URL是存放网页数据的文件名或一个CGI程序的文件名,也可以是其他访问目标,

CGI程序:对web浏览器调用其他程序的规则的定义。

”进行何种操作”指操作方法和内容。

常用的方法:get,一般在请求消息首部写上get方法,然后在URL中写上存放网页数据的文件名“/dir1/file1.html”,表明要获取“/dir1/file1.html”文件中的数据。

0bc83e0e2b9e4fdcbd360211b2484790.jpg

 

web服务器收到后,会打开文件取出里面的数据,存放到响应消息中。

常用的方法:post,一般在请求消息首部写上post方法,当我们在网页页面中的输入框填写数据时,这些可以输入信息的部分为表单,使用post方法,URL会指向Web服务器中运行的一个应用程序的文件名,之后发送的请求消息中包括传递给应用程序或脚本的数据。服务器收到请求消息后,再将其转发给相应的应用程序。另一方面,Web服务器也会接收应用程序的·数据,将其发送回客户端。

put和delete方法用来从客户端修改或删除服务器端的文件。

web浏览器收到请求消息后会发送响应消息,

当我们访问网页时,有时网速较慢时,我们会发现先出现图片大小的空白页,然后图片再一条条加载出来,这是为啥呢?

这里其实发送了不止一条请求消息和响应消息。

每条请求消息只能写一个URL,每次只能获取一个文件,要获取多个文件需要多次请求,

下面这个例子可以很好的说明;

客户端先获取名为sample1.html的网页,然后再获取其中的名为picture.jpg的图片。

92766588612d4ec38c3a71fb7573ab6b.png

60b3fae5c9984b55a9ec2e837cafd844.png

回到开头,当我们生成HTTP请求消息后需要将其发送到Web服务器,如何完成呢?下次更新。

 

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值