网络中的数据传输格式
这里划分为四层来看
- 应用层:http,ftp,tftp,telnet,dns,smtp协议
- 传输层:tcp,udp协议
- 网络层:ip协议
- 链路层:arp,rarp协议
主机A向主机B发送数据的前提:主机A知道主机B的IP地址。
1. 以太网帧(链路层)
以太网帧格式:
类型 | 数据 | |
以太网帧 | 0800 | IP数据报 |
0806 | ARP请求答应 | |
0835 | RARP请求答应 |
各种协议的作用:
ARP协议:根据IP地址获取MAC地址
RARP协议:目的路由器给源主机发送
发送以太网帧流程:
主机A向主机B发送以太网帧(从链路层的角度),流程为:
- 主机A发送ARP请求。因为此时主机A只有主机B的IP地址,但是没有主机B的MAC地址,所以主机A发送ARP请求,请求根据主机B的IP地址得到主句B的MAC地址;
此时的ARP请求帧里面,主机B的MAC地址被设置为ff:ff:ff:ff:ff:ff - 路由器根据路由表取出B的MAC地址。(路由表里保存了IP和MAC的对应关系表),目的路由器收到ARP请求之后,做出RARP应答,应答里面包含目的主机的MAC地址
- 根据以太网帧协议,主机A向主机B发送MAC帧。
2. IP数据包(网络层)
IP数据包格式:
- 版本号:IPv4、IPv6
- TTL:Time To Live。设置数据包在路由节点中的跳转上限。每经过一个路由节点,该值-1。当其值减为0时,数据包被抛弃。
- 源地址:发送主机的IP地址;
- 目的地址:目的主机的IP地址;
注意IP地址格式(以IPv4为例):人类看到的IP地址是“点分十进制”格式,计算机识别是“二进制”格式。“点分十进制”本质是字符串格式。
3. TCP、UDP数据报(传输层)
3.1 面向连接的TCP传输
TCP数据包格式:
- 源端口:目的主机进程的端口号。16位,2的16次方=65536。
- 目标端口:目的主机进程的端口号。
- 序号:Seq序号。32位。用来标识从主机A发送到主机B的数据包的序号,计算机发送数据时对此进行标记。
- 确认号:Ack。32位。客户端和服务器端都可以发送。Ack = Seq + 1。
- 标志位:每个标志占用1Bit,一共6Bit。
- URG:紧急指针有效
- ACK:确认序号有效
- PSH:接收方应该尽快将这个报文交给应用层
- RST:重置连接
- SYN:建立一个新连接(建立一个新的同步连接)
- FIN:断开一个连接
(1) 三次握手建立连接
注意重要的三个位置:序号Seq、确认号Ack和标志位
第一次握手 | 第二次握手 | 第三次握手 | |
发送方向 | 客户→服务器 | 服务器→客户 | 客户→服务器 |
Seq | 1000 | 2000 | |
Ack | 1001 | 2001 | |
标志位 | SYN | SYN+ACK | ACK |
三次握手发生在内核空间,程序员无需理会。
三次握手在用户空间的体现(代码层面):
服务器端:accept()
客户端:connect()
三次握手完成,代表着accept()函数和connect()函数调用成功并成功返回。
(2) 数据通信
主机A:发送数据
主机B:好的,我收到了
所以TCP是可靠的,面向连接的。
(3) 四次挥手关闭连接
记忆:四次挥手----FAFA
1.客户端FIN→2.服务器端ACK→3.服务器端FIN→4.客户端ACK
12阶段完成后,客户端处于半关闭状态,客户端无法向服务器发送数据
34阶段完成后,服务器处于半关闭状态,服务器无法向客户端发送数据
客户端半关闭+服务器端半关闭+TIME_WAIT = 四次挥手断开连接
关于半关闭:
半关闭关闭的是数据报文发送通道,ack应答是控制报文,由ICMP、ARP、RIP转发。所以客户端半关闭之后,仍可以发送“4客户端ACK”
3.2 不面向连接的UDP传输
4. 应用层数据
原文地址:https://blog.csdn.net/weixin_69032308/article/details/143908276
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!