- 网络层协议
- IP协议
- IP协议格式
- IP地址
- IPV4
- IPV6
- IP地址规则-地址管理
- 路由选择
- 数据链路层协议
- 以太网协议
- 协议格式
- MTU(最大传输单元)
- MTU对IP协议的影响
- MTU对UDP协议的影响
- MTU对TCP协议的影响
- 开放性问题
网络层协议
IP协议
IP协议格式
4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。
4位头部长度(header length):IP头部的长度是多少个32bit,也就是length *4的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。
8位服务类型(Type of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段 (必须置为0)。4位TOS分别表示: 最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。
16位总长度 (totallength):IP数据报整体占多少个字节
16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。
3位标志字段:
第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用)。
第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。
第三位表示”更多分片",如果分片了的话,最后一个分片置为0,其他是1。类似于一个结束标记。如果当前表示为更多分片,那就代表看到的消息可能是大消息体中的一部分。
13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)
8位生存时间(Time To Live,TTL):TTL的值表示,在网络每经过一次网络设备就减1,如果TTL减到0就表示网络不通。这个字段主要是用来防止出现路由循环。
8位协议:表示传输层用的是哪个协议TCP、UDP…
16位校验和:CRC校验。
32位源IP和目的IP地址:网络层确定的源IP和目的IP。
选项:载荷,传输层发来的数据。
IP地址
IPV4
总长是32位,最多可以表示42亿个地址。在网络上如何分配IP地址让计算机之间可以相互访问?
1.动态分配:设备上网的时候才获取一个IP,下线时就会被收回。一个IP只能同时表示一台主机。
2.NET机制:对一个子网中的所有机器共用一个公网IP地址,子网内的机器分配内网IP。内网IP在不同的子网中是可以重复的,公网IP地址不能重复。
IP地址分为两大类:
外网IP/公网IP;
内网IP/局域网IP:约定10.,172.16.~172.31.,196.168.
IPV6
总长128位来表示IP地址,约等于42亿 x 42亿 x 42亿 x 42亿。IPV6与IPV4不兼容。
IP地址规则-地址管理
子网掩码:也是32位,左边都用1来表示,有来确定网络号,不会1和0混着表示有多少个1,就表示IP地址左侧有多少位是网络号。IP地址与子网掩码进行按位与运算,得到的结果就是网络号。
默认网关:所有流量都要通过网关,在这里可以做流量的控制。
路由选择
发出一个请求之后如何到达目标主机。试想一个地图导航路线,可以有很多条。路由的选择过程本身也是一个动态的过程。在路由选择的过程中,每次询问并且向目标前进,一跳,完整的通信过程就是通过一跳一跳完成的。
具体过程:
网络数据报在到达路由器的时候,路由器本身会有一个“路由表(路由器已经认识的路),但是一个路由器无法认识到网络的全貌但是知道附近的一部分。如果当前的目的IP,路由器认识,就会给出一个明确的路线。如果当前的目的IP路由器不认识,他就会把这个数据发送给下一个“更见多识广”的路由器(认识的路更多),下一跳,最终会找到通往目的IP的路径。
是否有可能问了一大圈也没有找到目的地?是有这个可能的,比如IP地址不存在,每问一次路由器(路由转发),TTL就减1,当TTL为0时,就响应超时,找不到主机。
那内网中的机器是如何去访问外网的资源,外网的响应又是如何返回给请求的机器?
1.通过DNS来解析出来IP地址。DNS保存了所有网站的域名(比如“www.baidu.com”这个字符串)和IP的对应关系。
2.通过设置源IP和目的IP进行一层一层路由,最终到达目标服务器。
3.处理完响应之后原路返回给发送方。
数据链路层协议
以太网协议
“以太网” 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等;以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等。
协议格式
源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。
类型字段有三种值,分别对应IP、ARP、RARP;
帧末尾是CRC校验码。
MTU(最大传输单元)
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制。
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
不同的数据链路层标准的MTU是不同的;
MTU对IP协议的影响
● 由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。 将较大的IP包分成多个小包,并给每个小包打上标签;
● 每个小包IP协议头的16位标识(id) 都是相同的;
● 每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);
● 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
● 一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据;
MTU对UDP协议的影响
● 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
● 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。
MTU对TCP协议的影响
● TCP的一个数据报也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
● TCP在建立连接的过程中,通信双方会进行MSS协商。
● 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。
● 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。然后双方得知对方的MSS值之后,选择较小的作为最终MSS。
● MSS的值就是在TCP首部的40字节变长选项中(kind=2);
开放性问题
在浏览器中输入一个URL,到最终展示页面,会发生哪些事情?
1.进行DNS域名解析。
a.网络上是以IP地址做为主机的标识,但是IP不好记忆,于是用一个域名来表示IP地址
b.DNS服务器的功能就是把域名转换成IP地址
c.DNS服务器在全球有13个根服务器,其中一个叫总根,12个是辅根
2.进行数据封装
a.浏览器根据用户请求的数据,构造出HTTP请求 (应用层协议)
b.交给传输层 TCP
C.TCP进行三次握手,与目的主机建立连接
d.把数据交给网络层,使用IP协议进行封装
e.网络层再把数据交给数据链路层
f.数据链路层把数据封装后再交给物理层进行传输
3.传输过程
a.中间会经历交换机和路由器等网络设备
b.每个网络设备会进行分用,之后再封装进行相邻节点的传输。这个分用就是在替换源IP
4.到达目标服务器
a.进行层层分用
b.到达HTTP这一层后服务就可以解析出用户请求的那个资源
c.服务器做出响应(服务端程序要处理的业务逻辑)
5.服务器把响应数据重新封装,交给下一层
6.响应数据通过中间转发,回到客户端
7.客户端解析数据得到响应数据
8.浏览器渲染并呈现内容
继续加油~