一、网络层
1.网络层的主要功能是:逻辑寻址(最优路径)
网络层的三个功能:
定义了基于IP协议的逻辑地址
链接不同的媒介类型
选择数据和通过网络的最佳路径
2.IP数据包格式
PS:可以通过其中生命周期TTL 的 返回值 确定你的 系统类型
win 128 左右 linux 64 左右
IP数据包格式(分为20字节的固定部分,表示每个ip数据包必须包含的部分,和40字节的可变长部分)
-
版本号(4):指IP协议版本。并且通信双方使用的版本必须一致,目前我们使用的是IPv4,表示为0100 转为十进制数是4
-
首部长度(4):IP数据包的包头长度(不包括数据)
-
优先级与服务类型(8):该字段用于表示数据包的优先级和服务类型。通过在数据包中划分一定的优先级,服务类型定义了如何处理数据一般没有使用
-
总长度(16):IP数据包的总长度,最长为 65535 字节,包括包头和数据。
-
标识符(16):该字段用于表示IP数据包的标识符。当IP对上层数据进行分片时,它将给所有的分片数据分配一组编号,然后将这些编号放入标识符字段中,保证分片不会被错误地重组。标识符字段用于标志一个数据包,以便接收节点可以重组被分片的数据包
-
标志(3):和标识符一起传递,指示不可以被分片或者最后一个分片是否发出(完整)
-
段偏移量(13):一个数据包需要分片,指明这个分片举例原始数据开始的位置,作用重组数据
-
TTL(time to live)生命周期(8):可以防止一个数据包在网络中无限循环的转发下去,每经过一个路由器 -1,当TTL的值为0时,该数据包将被丢弃 0-255
-
协议号(8):封装的上层哪个协议,ICMP:1 TCP:6 UDP:17
-
首部校验和(16):这个字段只检验数据报的首部,不包括数据部分。这是因为数据报每经过一次路由器,都要重新计算一下首部校验和(因为,一些字段如生存时间、标志、片偏移等可能发生变化)
-
源地址(32):源ip地址,表示发送端的IP地址
-
目标地址(32):目标ip地址,表示接收端的IP地址
-
可选项:选项字段根据实际情况可变长,可以和IP一起使用的选项有多个。例如,可以输入创建该数据包的时间等。在可选项之后,就是上层数据,可选性作为可填充项,一般可有可无。
注:根据实际情况可变长,例如创建时间等 上层数据
3.ICMP协议(ping 检测主机双向联通性)
ICMP的作用:检测网络的双向联通性
ICMP是一个:“错误侦测和回馈机制”
通过IP数据包封装的
用来发送错误和控制消息
ping的格式([]可有可无)
ping [选项] 空格 IP地址
4.IP地址后面可跟的快捷键
-t 长ping
-l size 发送缓冲区大小(size代表数字)
-w 超时等待时间
-n 制定ping几次
ping -t 长ping ip地址 ctr1+c停止
ping -l 指定包的大小(1600 2000) ip地址
ping -w 指定等待时间(默认是秒: 2 ) ip 地址
ping -n 指定的次数(5) ip 地址
当你的网络服务出现问题的时候,排错的思路和顺序
ping
1.ping 自己设置ip 的IP地址1.ping 自己 127.0.0.1 硬件排查网络故障
2.ping网关 tracert(跟踪) 排查网络故障
3.看双方地址是否有问题
4.防火墙策略是否有问题 ( 配合 找网络工程师)
5.ARP协议
ARP协议是一个地址转换协议,通过解析IP地址而得到mac地址,在网络通信中首先运行。
1.无故ARP:
当一台设备获取到一个Ip 地址时 ,会自动发送一个无故ARP,检测 是否有设备已使用了此地址
2.通过解析IP地址得到mac地址,完成数据封装
二、传输层协议
1.tcp和udp协议
tcp/ip协议族的传输层协议
tcp:传输控制协议
udp:用户数据报协议
2.tcp协议分层
tcp协议的分层,工作场景与OSI七层模型的相同点和区别
tcp/ip是一个四层协议
由上到下分别是:
- 应用层
- 传输层
- 网络层
- 网络接口层
tcp/ip与osi的相同点:
都是以协议栈的概念为基础,协议栈中的协议相互独立并且都是为上层提供服务
tcp/ip与osi的不同点:
模型层次数量不同
osi是现有模型,tcp/ip是先有协议
目前osi是国际标准,适用于各种协议栈,tcp/ip是实际标准,只适用于tcp/ip网络
3.基于tcp/ip协议的网络通信
源端口(16)、目标端口(16):
计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即 65536 (0-65535)
序列号seq:
表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0 开始 无限循环
确认号ack:
表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号:传输是否有问题?
首部长度(数据偏移)(6):
表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
控制位:
-
URG(紧急位):
表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
-
ACK(确认位):
表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
-
PSH(急切位):
提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
-
RST(重置位):
如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
-
SYN(同步位):
在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
-
FIN(断开位):
表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
窗口大小:
表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
校验和:
提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置
选项部分:**其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
tcp建立连接的过程:三次握手
1、发送方向接收方发送SYN请求(seq=x,SYN=1) 第一次握手
seq=x:发送方系统随机生成的序列号
SYN=1:请求建立连接
2、接收方接收到此请求后会回复一个SYN+ACK(seq=y,ack=x+1,SYN=1,ACK=1) 第二次握手 这里将SYN和ACK组合成了一个数据包一起发送节约一次握手过程
seq:接收方系统随机生成的序列号
ack=x+1:确认接受到发送方的信息并要求下一次用x+1
SYN=1:请求建立连接
ACK=1:确认之前的连接有效
3、发送方接收到接收方发来的SYN请求后,发送一个ACK确认(seq=x+1,ack=y+1,ACK=1) 第三次握手
seq=x+1:每经过一次数据传输,序列号+1
ack=y+1:确认接收到接收方的信息,并要求下一次用y+1
ACK=1:确认之前的连接有效