目录
网络层的功能
IP 数据包格式
ping
冲突域
广播域
ARP 协议概述
TCP / IP 协议族的传输协议
TCP 协议
UDP 协议
TCP 报文段
控制位
TCP 连接
定义了基本 IP 协议的逻辑地址
连接不同的媒介类型
选择数据通过网络的最佳路径
数据封装的时候在网络层会封装 IP 地址的头部,形成 IP 数据包
IP 数据包格式(分为 20 字节的固定部分,表示每个 IP 数据包必须包含的部分和 40 字节的可变长部分)
通过 TTL 的返回值确认你的系统类型
1.win 128 左右
2.linux 64 左右
分为20字节的固定部分,表示每个ip数据包必须包含的部分,和40字节的可变长部分
版本号(4bit):指IP协议版本。并且通信双方使用的版本必须一致,目前我们使用的是IPv4,表示为0100 十进制
首部长度(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一起使用的选项有多个。例如,可以输入创建该数据包的时间等。在可选项之后,就是上层数据
ping 是网络设备、Windows 、unix 和 linux 平台上的一个命令,其实是一个小巧而实用的应用程序,该应用基于 ICMP 协议
ping 常用于探测到达目的节点的网络可达性
ping 选项:
显示自己 IP 地址 ipconfig
ping --help 显示帮助命令
-t 长 ping
-l size 发送缓冲区大小
-w 超时等待时间
-n 指定 ping 几次
ping -t ip地址 长ping ctrl + c 停止
ping -l 指定包的大小(1600 2000) ip 地址
ping -w 指定等待时间(默认是:2 s) ip 地址
ping -n 指定的次数(5) ip 地址
两台设备同时发送消息时,互相干扰,那他们就处在同一个冲突域
A 发送广播,所有能收到广播的机器,认为在同一广播域
一台机器发送广播,能收到消息的机器都是在同一广播域
交换机的所有端口默认在同一个广播域里
路由器的每一个端口都是一个独立的广播域
局域网中主机的通信: IP 地址与 MAC 地址
什么是 ARP 协议: 地址解析协议
将一个已知的 IP 地址解析成 MAC 地址
ICMP 报错举例:
TCP :传输控制协议(面向的连接)
UDP :用户数据报协议(无连接)
TCP 是面向连接的、可靠的进程到进程通信的协议
TCP 提供全双工服务,即数据可在同一时间双向传输
TCP 报文段
TCP 将若干个字节构成一个分组,叫报文段
TCP 报文段封装在 IP 数据报中
TCP 的特性:
工作在传输层
面向连接协议
全双工协议
半关闭(四次挥手)
错误检查
将数据打包成段,排序
确认机制
数据恢复,重传
流量控制,滑动窗口
UDP 特性:
工作在传输层
提供不可靠的网络访问
非面向连接协议
有限的错误检查
传输性能高
无数据恢复特性
UDP 协议和端口号
TCP 协议的端口号和功能
序号:
发送端为每个字节进行编号,便于接收端正确重组,序号是随机生成的(首次进行数据包,沟通时是随机产生的)
确认号:
用于确认发送端的信息
窗口大小:
用于说明本地可以接收数据段的数目,窗口大小是可变的
a 电脑 ----> b 电脑
a 会随机产生一个序号为 x 的数据包发给 b
a 电脑 <---- b 电脑
b 电脑收到以后会随机产生一个回复包随机产生序号 y
在回复包中会产生一个新的字段
确认号规定了 a 下一次发送的序号 x + 1 不允许随机产生
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报文段称为结束报文段
TCP 建立连接过程称为三次握手
pc1 想和 pc2 建立连接
pc1 会发送 syn = 1 序号为随机数 x 的报文给 pc2
pc2 收到 pc1 的报文会回复一个 syn + ack 报文给 pc1 该报文序号为随机生成的y确认号为x+1(ack=x+1)
syn=1 ack = 1
pc1 收到 pc2 同意建立连接的报文,会回复一个ack报文,该报文序号为x+1 确认号为 y+1 ack = 1
pc1 和 pc2 就建立连接了
syn=1:请求建立连接
ack=1:同意建立连接
x+1:确认号
四次挥手
11 种状态简述
LISTEN:侦听来自远方TCP端口的连接请求
SYN-SENT:发送连接请求后等待匹配的连接请求
SYN-RECEIVED(syn已经收到的):收到和发送给一个连接请求后等待对连接请求的确认
ESTABLISHED(已建立的):代表一个打开的连接,数据可以传送给客户
FIN-WAIT-1:等待远程TCP的连接中断请求,或者先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSEING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间一确保远程TCP接受到连接中断请求的确认
CLOSED:没有任何连接状态