网络层和传输层协议

目录

一、网络层协议

1.1 IP数据包头部结构

1.2 网络层中重要的协议

1.2.1 ICMP协议

1.2.2 ARP协议

二、传输层协议

2.1 传输层作用

2.2 传输层协议

2.3 TCP报文内容

2.4 三次握手和四次挥手

2.4.1 建立连接:三次握手

2.4.2 断开连接,四次挥手

2.4.3 小问题


一、网络层协议

网络层定义了IP地址,连接不同的媒介类型,最佳路径选择数据包的转发。

网络层封装数据:IP头部,包含源IP和目标IP的数据包。

1.1 IP数据包头部结构

  • version:版本,IPV4/IPV6

  • Header Length:首部长度,表示IP数据包头部的长度。头部长度可变,长度只能是20的倍数(20/40/60),一般情况下都是20字节。

  • Differentiated Services Field:优先级与服务类型

  • Total Length:表示整个IP数据包的长度。最大65535字节。

  • Identification:数据包的标识符,对上层数据进行分片,会给分片的数据进行编号,保证分片不会被错误的重组。

  • Flags:标志字段,数据包可以分片或者不能分片,如果是不能分片的包,直接发出,如果是分片的包,确保分片包中最后一个分片以发出。

  • Fragment Offset:段偏移量。指每个分段数据与初始位置之间的距离。对应在一个分片序列中,如何把各个分片重新连接。

  • TTL:Time to Live 生命周期,消息每经过一个路由器TTL减一。一般来说,TTL从128开始递减的是Windows系统,从64开始递减的是Linux系统。

  • Protocol:协议字段。

  • Header Checksum:首部校验和,接收方和网关服务器据此校验数据是否被改动过。

  • Source Address:源IP地址

  • Destination Address:目标IP地址

  • Options:可选项(0/20/40字节)

1.2 网络层中重要的协议

1.2.1 ICMP协议

ICMP:(网间控制报文协议,Internet Control Messages Protocol):ping命令。ICMP最大的作用就是用来进行网络故障排障。

MTU:(Maximum Transmission Unit)最大传输单元,一般默认1500字节。

Echo:各数值对应的描述

typecode描述结果
00reply响应
80request请求
30网络不可达
31主机不可达
32协议不可达
33端口不可达
110超时

其中,端口对应服务和程序。每个服务、程序都有特定的端口。

  • 例:ping不通,排障思路。

    • 回环地址:ping 127.xxx.xxx.xxx 自我测试,测试自身网络是否正常,常用于调试和开发。

    • 硬件问题:网线问题、网卡问题

    • 双方地址是否正确

    • 网关服务器:路由器设置

    • 交换机的问题

    • 防火墙的问题

1.2.2 ARP协议

ARP协议:地址解析协议,把网络层的IP地址转换成数据链路层的MAC地址

ARP表:把IP地址和MAC地址形成一个映射关系。

ARP协议的工作原理:

  1. 在局域网中,对所有设备进行广播。

  2. 只有符合条件的设备会对广播进行响应,找到了IP地址对应的MAC地址,其他设备不会响应。

  3. 会把这个IP地址和MAC地址的映射关系保存在设备当中——ARP表。

  4. 保存时间是180秒。

  5. 保存时间失效,后续再进行传输时,需要再次ARP广播。

二、传输层协议

2.1 传输层作用

传输层作用:

  1. 数据分段和重组。

  2. 连接管理(TCP/UDP),建立、维护和中止源主机和目标主机之间的连接。

  3. 可靠性保证。

  4. 流量控制。

  • 协议:规定数据通信和交互的规则和约定。

  • 通信规范:数据的格式,传输方式,消息的结构,数据加密和编码的规则。

  • 数据交换:数据在网络中的交换方式,有数据包的组织方式,传输顺序,错误检测与纠错。确保数据的正确、完整传输。

  • 数据安全:数据安全保障。

  • 设备互联:打破物理底层的限制,不同设备、系统之间通过协议可以实现通信。

  • 网络管理:定义网络的管理以及监控的范畴。

2.2 传输层协议

  1. TCP协议:面向连接,可靠的,进程到进程的通信协议。TCP提供全双工服务,即数据是双向传输的。每个TCP都有发送缓存和接收缓存,用来存储临时数据。通信双方要传输数据必须先建立连接。

  2. UDP协议:用户数据报协议,无连接,不保证可靠性的传输层协议。发送端发送数据不在乎发送的数据是否能够到达目标主机,无论数据是否出错。收到数据的主机也不会告诉源主机是否收到了数据。主要应用场景:直播。

  • TCP协议可靠性较高,传输速度较慢。

  • UDP协议可靠性较低,传输速度更快。

2.3 TCP报文内容

TCP报文重要的内容有:

  • Source Port:源端口

  • Destination Port:目的端口

  • Ack:(Acknowledgement number)Ack=10,表示接收方期望接收的下一个序列号是10,用来确认传输是否有问题。

  • Seq:(Sequence number)序列号,请求方发送给接收方的序列号

  • Flags:标志位,控制位。TCP建立连接和断开连接、维护连接都靠这些控制位。

    • URG:(Urgent)紧急位,紧急指针(urgent pointer)有效

    • ACK:(Acknowledgement)确认位,只有当ACK=1时,才表示序列号字段有效,当ACK=0,表示字段是无效的。

    • SYN:(Synchronization)同步位,连接位,请求建立连接时,发送SYN=1。

    • RST:(Reset)重置位,重置连接。

    • FIN:(Finish)断开位,期望断开的一方,要发送FIN=1。

    • PSH:(Push)急迫位,PSH=1,表示要把数据尽快的发送到应用层。

    • WIN:接收数据缓冲区的空闲空间。

2.4 三次握手和四次挥手

2.4.1 建立连接:三次握手

过程描述:

  1. 第一次握手: Client 端发送连接 SYN 请求报文。

  2. 第二次握手:Server 端接受连接后回复 ACK 报文,同时发送 SYN 报文,并为这次连接分配资源。

  3. 第三次握手:Client 端接收到 SYN+ACK 报文后也向 Server 段发送 ACK 报文,并分配资源,这样 TCP 连接就建立了。

小结:三次握手的关键是要确认对方收到了自己的数据包,通过Ack字段与Seq字段确认。每次比较自己发送的Seq与对方回应的Ack,如果Ack=Seq+1成立,说明对方正确收到自己的数据包。

2.4.2 断开连接,四次挥手

过程描述:

  1. 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

  2. 第二次挥手:Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。

  3. 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

  4. 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成四次挥手。

MSL:(Maximum Segment Lifetime) TCP的数据段能在网络中存活的最大时间。一般是120s,超时后数据段会被丢弃。

TIME_WAIT:通信双方建立TCP连接后,主动关闭连接的一方会进入TIME_WAIT状态。TIME_WAIT时间一般会设置成MSL的两倍,习惯,非规则。

小结:其中,第二次挥手后,Server进入CLOSE_WAIT状态,直到Client与Server之间不在有数据传输,再开始第三次挥手,发送FIN给Client,等待Client发送最后一个ACK。

四次挥手之后,双方之间不在有数据传输,但是连接没有完全关闭,Client进入TIME_WAIT状态。如果后续还有信息,不需要再次建立连接了。TIME_WAIT有时间范围,超时之后进入CLOSED状态,完全断开连接。

2.4.3 小问题
  1. 为什么是三次握手不是四次就可以连接呢?

    第一次握手,A向B发送信息,B收到后可以确认自己(B)的收信能力与A的发信能力正常。

    第二次握手,B向A发送信息,A收到后可以确认自己(A)的发信能力和B的收信能力正常。但此时B不知道自己发信能力是否正常。

    第三次握手,A向B发送信息,B收到后可以确认自己(B)的发信能力正常。

    三次握手后,A和B都能够确认双方收发数据能力正常,可以开始发送数据了。所以第三次握手不能少,第四次就多余了。

  2. 为什么不是三次挥手而是四次挥手才能断开连接呢?

    握手时第二次握手,服务器回复客户端是可以直接发送SYN+ACK报文,表示请求+确认。相比之下第二次挥手时,服务器端收到FIN报文,很可能不会立即断开,只能先回复一个ACK报文,表示我收到了。直到服务器端所有报文都发送完毕,才会向客户端发送FIN表示可以断开,所以比握手多了一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值