网络层与传输层

255 阅读9分钟

一、网络层

1.网络层的主要功能是:逻辑寻址(最优路径)

网络层的三个功能:

定义了基于IP协议的逻辑地址

链接不同的媒介类型

选择数据和通过网络的最佳路径

2.IP数据包格式

IP数据包格式.png

IP数据包格式自做.png

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协议的网络通信

tcp网络通信数据包结构.png

源端口(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:确认之前的连接有效