1、传输层和网络层的对比
tcp属于传输层协议,传输层从上层拿到数据后,对发送数据进行拥塞控制、流量控制、超时重传等等,本质是一种策略,解决的是上层的一个进程给的数据到另一台主机上的另一个进程的问题。
ip协议(“网际互连协议(Internet Protocol)”):是一种执行能力,是在传输层策略的保证下,能够将数据从一台主机传送到另外一台主机。
2、ip协议格式
4位版本(version):指定ip协议的版本(iPV4/IPV6),对于IPV4来说,就是4.
4位首部长度(header length):表示ip报头的长度,以4字节为单位
16位总长度:ip报文(ip报头+有效载荷)的总长度,用于将各个ip报文进行分离
16位标识:唯一的标识主机发来的报文,如果数据在ip层进行了分片,那么每一片的标识都是一样的
13位片偏移:分片相对于原始数据处进行了偏移,表示当前分片在原数据中的偏移位置,实际偏移的字节数是这个值*8得到的。因此除了除了最后一个报文之外,其他报文的长度必须是8的整数倍,否则报文就不连续了。
8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数,一般是64,每经过一个路由,TTL-=1,一直到0,还没有到达,那么就丢弃了,这个字段主要是用来防止出现路由循环。
8位协议:表示上层协议的类型
16位首部校验和:使用CRC进行校验,来鉴别数据报的首部是否损坏,但不检验数据部分
32位源ip地址和32位目的ip地址:表示发送端和接受端对应的ip地址
选项字段:不定长,最多40字节
2.1、如何分离ip报头和有效载荷?和tcp类似
报头范围在20到60字节之间,所以必含4位首部长度,接着可拿到真正的报头长度,解锁16位总字节。总字节减去真正报头长度就是有效载荷。
3、IP报文的分片和组装
ip要将报文交给下一层数据链路层,但是数据链路层(通常是MAC协议)的数据帧报文大小不能超过某个值。mtu 1500,我的服务器上是这么大。
假设此时IP层要传输的数据超过了1500字节,那么就得在ip层进行分片,然后再将分片后的数据交给下一层MAC帧发送。
简单点说,大于MAC数据帧最大字节分片。
将数据分成几片,将几片和报头组合在一起。每一片就是一个ip报文。
其中16位标识符(id)一样,3位标志位的第三位为1,最后一片的第三位为0,13位片偏移是分片数据在总体数据中首次出位置处除以8.
组合就是目标主机将这些规则运用好,将分片组合起来。
个人理解:各个层是解耦的,所以ip层分片,传输层,数据链路层不知道。所以分片组合都得ip层自己解决。
为什么不建议分片?
丢包需要tcp重传,麻烦。所以最好tcp层在建立链接的时候,就得考虑一次发多少,不要分片。
4、网段划分
IP地址 = 网络号 + 主机号
网络号:保证相互连接的两个网段具有不同的标识。
主机号:同一网段内,主机之间具有相同的网络号,但是必须具有不同的主机号
DHCP协议:
手动管理IP地址是一个非常麻烦的事情,当子网中新增加主机时需要给其分配一个ip地址,当主机断开网络时候又要将ip地址收回,便于分配给后续的主机使用。
我们连上校园网本质就是,路由器给我们动态分配一个IP地址,然后就可以上网了,断开时IP被回收。
由于网络很大,所以主机找主机很难,所以要先找主机所在的网络,然后再去网络中找主机。为了快速找到目标网络,所以我们需要对网络进行划分。
4.1子网划分:
CIDR:
在原有的五类网络上继续进行子网划分,这就意味着需要借助主机号当中的若干位来充当网络号,此时为了区分IP地址中的网络号和主机号,于是引用了子网掩码的概念。
每一个子网都有自己的子网掩码,子网掩码就是一个32位的整数,通常用一串0来表示
4.2特殊的ip地址
由于IP地址中全0为当前局域网的网络号,全一为广播地址,这两个地址都是不能作为主机的IP地址的。因此在某个局域网中最多能存在的主机个数是
4.3IP地址的数量限制
IPv4是一个4字节的32位整数,一共有2的32次方个ip地址,但是不够使用。CIDR提高了Ip地址的利用率,减少了浪费,但IP地址的上限并没有增加。
解决方式:1、动态分配IP地址:只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的Ip地址不一定是相同的,避免了Ip地址的强绑定于某一台设备
2、NAT技术:能够让不同局域网当中存在的两个相同Ip地址,NAT技术不仅能解决Ip地址不足的问题,而且能够有效的避免来自网络外部的 攻击,隐藏并保护网络内部的计算机
3、IPv6用16个字节128位来表示一个IP地址,能够大大缓解Ip地址不足的问题。但IpV6并不是IPv4的简单升级版,他们是互不相干的两个协议,彼此并不兼容,因此目前Ipv6还没有普及。
数据如何发送到服务器?
路由器是链接两个或多个网络的硬件设备,在路由器上有两种网络接口,分别是LAN口和WAN口。
LAN口:Local Area Network,表示连接本地网络的端口,主要与家庭网络中的交换机、集线器和PC相连
WAN口:Wide Area Network:表示广域网的端口,一般值互联网。
子网内ip不可重复,但是两个子网内的IP可能重复。
由于私网IP不能出现在公网中,因此子网内的主机和外网进行通信时,路由器会不断将数据包IP首部中的源IP地址换成路由器的WAN口IP,这样逐级替换,最终数据包中的源IP地址成为一个公网的IP,这种技术成为NAT技术(Network Address Translation,网络地址转换)
为什么私网IP不可能出现在公网中?
不同局域网中主机的IP是可能相同的,所以私网IP无法唯一标定一台主机,因此只能使用公网,因为IP地址要能唯一标识公网上的一台主机
IP地址不够,所以不能让主机直接使用公网IP,因为重复使用私网IP意味着可以在不同局域网内使用相同的IP地址,缓解了Ip的不足。
两台局域网当中的主机不能不夸网络进行通信:
一台主机发消息给另外一台得有对方地址,因为都是私网IP所以,可能相同。相同时,发消息本地环回了。
但实际确实存在一些技术能够使数据包在发送过程中不进行公网IP的替换,而将数据正确送到目标主机,这种技术叫做内网穿透,也叫做NAT穿透