web开发常见的计算机网络协议
协议模型
OSI七层协议模型
OSI七层协议模型分为应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
TCP/IP模型 TCP/IP模型分为应用层,传输层,网络层,数据链路层
TCP/IP模型和OSI七层协议模型对应关系
链路层
直接的0和1电信号是没有意义的,所以以字节为单位进行电信号分组,以太网规定一组电信号就是一个数据包,用帧表示,
数据包的结构
- 首部:包含目标MAC地址(固定14字节,MAC地址是具有网卡的物理机唯一身份标识;)和类型。
- 数据:数据最短46字节,最长1500字节,所以如果数据过长,则要进行分帧传输
- 尾部:固定为4个字节,表示数据帧校验序列
数据链路层的工作就是,对电信号进行分组传输,然后当数据到达子网后,以太网通过广播的形式,发送数据给所有主机,主机通过匹配数据首部的MAC地址,得到数据。以太网和WiFi是链路层的两种协议。
网络层
在网络层里,有三个很重要的协议,IP协议,ARP协议,路由协议
网络层主要工作定义网络地址,区分网段,对于不同子网数据进行路由,子网内MAC寻址
IP协议
网络层通过应用层传入的ip来进行主机的寻址,ip地址分为IPV4和IPV6,IPV4前面部分代表网络地址,后面部分代表局域网中地址,如果两个IP地址在同一个子网内,网络地址一定相同。
IP数据包
网络层包装的数据包叫IP数据包 首部:首部包含目标IP地址和源IP地址, 数据:数据包最大长度1500个字符,超过就要分包,数据过短,传输效率的降低.
特点
- 不可靠:不能保证IP数据包成功到达目的地。
- 无连接:IP不维护后续数据报状态信息,每个数据报处理相互独立,IP数据报无顺序,无固定路由路线。
IP首部
- 版本(4bit):协议版本号,ipv4/ipv6
- 首部长度(4bit):首部占32bit的数目。4 * 15首部最长60字节
- 服务类型(8bit):3bit-优先权;4bit:最小时延;最大吞吐量;最高可靠性;最小费用(是否优化由路由器决定)
- 总长度(16bit):65536
- 标识(16bit):IP标识,序列由操作系统决定,用于中间分片后收集合成
- 标志(3bit):DF:没有分片;MF:更多分片
- 片移量(16bit):根据偏移量将IP数据包整合到一起
- 生存时间(8bit):TTL,没经过一个路由器 减 1;可以防止环路
- 协议(8bit):下一个协议是什么 TCP/UDP
- 首部检验和(16bit):校验数据包完整性
- 源IP地址(32bit):
- 目的IP地址(32bit):
- IP选项:记录路径(每个经过路由器IP地址),时间戳(每个经过路由器IP地址和时间),宽松源站选路(必须经过指定路径),严格源站选路(只能经过指定路径)
路由协议
由于ARP协议MAC寻址在同一个子网中,网络层首先通过IP协议判断两个主机是否同一个子网,如在同一个子网,则ARP寻址,广播数据包到子网主机;如不在同一个子网,以太网将数据包发送到网关进行路由,最终到达目标IP子网,再通过ARP寻址。路由器(router)实际上就是一台配备有多个网卡的专用电脑。每一台主机和路由都能了解局域网内的IP地址和MAC地址的对应关系,这是实现IP包封装(encapsulation)到帧的基本条件
IP路由过程中,源IP,目的IP不会变;源/目的MAC地址会逐跳变化
特殊IP地址
网络,子网,主机,源端,目的端
0,0,0,0 网络上主机 没有获取IP地址之前 127开头 环回地址 全1 受限全网广播 10开头 面向网络的广播 1开头 面向子网的广播
子网掩码
IP地址和子网掩码通过按位与运算后就可以得到网络地址
ARP协议
设备驱动程序从不检查IP数据报中的目的IP地址。
知道主机的IP地址并不能让内核发送一帧数据给主机,ARP功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射
首先ARP请求目标主机IP地址,到达数据链路层后,子网内主机借助链路层以太网协议二层群播子网主机,主机根据数据包IP地址进行匹配,匹配到后就二层单播回应ARP返回自己MAC地址,以此确定目标机MAC地址,并缓存IP和MAC的映射关系,下次请求节约寻址时间。arp -a查询本机缓存的映射
在没有得到IP与目的主机MAC绑定关系时,网络中只会有ARP包,不会有IP包。
ARP结构
- 以太网首部
- 以太网目的地址:
- 以太网源地址:
- ARP请求/应答
- 硬件类型:1-以太网
- 协议类型:0800-IP
- 操作码:1-ARP请求 2-ARP回应
- 发送以太网地址,发送端IP地址
- 目的以太网地址,目的以太网IP地址
ARP代理
让 no ip routing的路由器或也能通过其他开启ARP代理的路由器 向目的主机发送包。返回MAC地址是代理路由器MAC地址。比如防火墙对外返回防火墙MAC地址,对内代理。
缺点
因为ARP响应有后来响应优先特点,所以在形成环路的环境下,代理ARP会造成MAC解析错误,环路问题
未开启代理路由器,只会响应直连网络响应
免费ARP
自己问自己IP地址时多少,主要判断是否有IP重叠的问题
免费ARP广播其他主机,会导致主机更新ARP映射,如果是非法攻击行为,导致ARP劫持
ICMP
传递差错报文以及其他需注意的信息,检验和字段覆盖整个ICMP报文(包含IP首部,)。
不会产生差错报文场景
- 差错报文不会产生差错报文
- 目的地址是广播/组播的
- 链路层广播
- 不是IP分片第一片(非第一片没有端口号信息)
-
源地址不是单个主机地址
- 类型代码:网络不可达,主机不可达,协议不可达等;重定向,超时
- 查询类,差错类报文
路由器肯定会返回ICMP报文,应用处不处理ICMP报文决定开发者是否实现
源站路由
传输层
作用
定义端口,标识应用程序,实现端到端的通信
UDP协议
一个简单的面向数据报的运输层协议,进程每个输出产生一个UDP数据报,并组装成一份待发送的IP数据包
通过IP层把数据发送出去,但是并不保证它们能到达目的地,UDP协议是没有确认机制的
IP数据报产长度超过网络MTU,就需要IP数据报进行分片
UDP校验和覆盖UDP首部和UDP数据。IP校验和只覆盖IP首部。校验和把16bit字相加。为了校验和的计算,最后增加填充字节0.
IP数据报分片过后,只有到达目的地才进行重新组装
构成
- 首部:8个字节,包括源端口和目标端口
- 数据:
TCP协议
面向连接,可靠,基于字节流的通信协议。通过建立三次握手,四次挥手的确认机制来保证数据的安全,可靠性。TCP数据包是没有长度限制的,但是一般情况下是不会超过IP数据包的长度。
- 三次握手
- 请求方发送数据端(以下简称请求方)发送连接请求,附带随机序列号X,
- 接受数据端(以下简称接受方)接受连接后回复ACK报文,递增序列号X,随机生成序列号y,说明已经准备好接受数据了,
- 请求方收到ack后向接受方再次发送ACK报文,递增序列号x,y。说明好的我知道你准备好了。那么这样就建立起连接了
序列号保证了数据按顺序传递
- 四次挥手
- 当请求方数据发送完后,确定要关闭连接时,向接受方发送FIN报文,
- 接收方获取到FIN后如果发现还有一部分数据没有传输,则会回应一个ack给请求方表示你的ack我收到了,但是请等待我的消息,
- 这时候请求方进入FIN_wAIT状态,当接受方确定数据发送完后,就会发送FIN报文,
- 请求方收到后就知道接收方已经准备好关闭连接了,再次发送ACK消息,进入TIME_WAIT(如果发送失败则重传),接收方收到ACK后就断开连接,而请求方等待一段时间后,没有收到回复,那么请求方就关闭连接,
流量控制:接收方确认数据时,将缓冲区大小发回发送方。发送方控制发送流量 拥塞控制:发送方维护一个拥塞窗口,表示无需确认可以发送未完成数据总数。连接建立,初始化,拥塞窗口大小为系统默认值,当发送方检测到超时错误时,会减少拥塞窗口大小,反之,增加。有效保护了网络基础带宽
sliding window
对于发送方来说,滑窗的左侧为已发送并已ACK过的片段序列,滑窗右侧是尚未发送的片段序列。滑窗中的片段(比如片段5,6,7)被发送出去,并等待相应的ACK。如果收到片段5的ACK,滑窗将向右移动。这样,新的片段从右侧进入滑窗内,被发送出去,并进入等待状态。在接收到片段5的ACK之前,滑窗不会移动,即使已经收到了片段6和7的ACK。这样,就保证了滑窗左侧的序列是已经发送的、接收到ACK的、符合顺序的片段序列
应用层
将字节流数据通过HTTP,FTP,SMTP等协议转换为能够识别的格式,json,xml等。
应用层工作就是定义数据并按照对应格式进行解析
数据如何传输
当你输入一个网址并按下回车键的时候,首先,应用程序对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上双方IP地址,确认了双方的网络位置;最后链路层协议加上双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播形式,通过传输介质发送到对方主机