自学内容网 自学内容网

网络中的数据传输格式

这里划分为四层来看

  • 应用层:http,ftp,tftp,telnet,dns,smtp协议
  • 传输层:tcp,udp协议
  • 网络层:ip协议
  • 链路层:arp,rarp协议

主机A向主机B发送数据的前提:主机A知道主机B的IP地址。

1. 以太网帧(链路层)

以太网帧格式:

类型数据
以太网帧0800IP数据报
0806ARP请求答应
0835RARP请求答应

各种协议的作用:

ARP协议:根据IP地址获取MAC地址

RARP协议:目的路由器给源主机发送

 发送以太网帧流程:

主机A向主机B发送以太网帧(从链路层的角度),流程为:

  1. 主机A发送ARP请求。因为此时主机A只有主机B的IP地址,但是没有主机B的MAC地址,所以主机A发送ARP请求,请求根据主机B的IP地址得到主句B的MAC地址;
    此时的ARP请求帧里面,主机B的MAC地址被设置为ff:ff:ff:ff:ff:ff
  2. 路由器根据路由表取出B的MAC地址。(路由表里保存了IP和MAC的对应关系表),目的路由器收到ARP请求之后,做出RARP应答,应答里面包含目的主机的MAC地址
  3. 根据以太网帧协议,主机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标志位

三次握手过程
第一次握手第二次握手第三次握手
发送方向客户→服务器服务器→客户客户→服务器
Seq10002000

Ack

10012001
标志位SYNSYN+ACKACK

三次握手发生在内核空间,程序员无需理会。

三次握手在用户空间的体现(代码层面):

服务器端: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)!