hello world之旅

hello world之旅

​ 两个进程之间的hello world传输(自上而下)。

一: 基本信息

数据正文:hello world

ASCII码转化值:68 65 6c 6c 6f 20 77 6f 72 6c 64

源地址:172.16.60.96:8888

目标地址:192.168.0.100:60974

通过Wireshark抓取的完整的帧

f0 18 98 79 52 f8 cc 08 fb a9 a2 66 08 00 45 00
00 3f 70 0d 40 00 3d 06 24 2f ac 10 3c 60 c0 a8
00 64 22 b8 ee 2e e4 43 42 ea 92 e4 32 80 80 18
00 e3 bc f6 00 00 01 01 08 0a 43 9a 32 e8 2b e4
dd a4 68 65 6c 6c 6f 20 77 6f 72 6c 64 6b d1 60
52 78 da 6b fb

二: 运输层

传输层,为相互通信的进程之间提供逻辑通信。使用tcp协议来保证通信的可靠性,数据的完整性,建立一条全双工的可信通道。(运输层还有一些其他协议,在这用tcp协议来做示范,因为它更具有代表性)

tcp协议头

协议头部:

0x22 b8 |ee 2e | e4 43 42 ea | 92 e4 32 80 | 80 | 80 18 | 00 e3 | bc f6 | 00 00 | 01 01 08 0a 43 9a 32 e8 2b e4 dd a4 | 68 65 6c 6c 6f 20 77 6f 72 6c 64

转换:

8888 | 60974 | 1 | 1 | 32 bytes(8) | flags | 227 | bc f6 | 0 | options | hello world

解释:

8888: 源端口 2字节 发送进程端口

60974: 目标端口 2字节 接收进程端口

1: 序号 4字节 用于标记数据正文中的每一个字节

1: 确认号 4字节 对方下一个报文的序号希望值

32bytes(8): 首部长度 4字节 标识tcp头部有多少个4字节(32bytes),这里有8个

flags:0x018 3byte TCP数据包标记

flags内部含义:

​ reserved: 000 预留位

​ nonce: 0 随机数,

​ connection window reduced(CWR): 0 拥塞窗口减少

​ eco-echo: 0 ECN响应标志

​ urgent: 0 紧急报文

​ acknowledgement: 1 应答报文

​ push: 1 推送,数据包立刻发送

​ reset: 0 复位,中断一个链接

​ syn: 0 同步;表示会话请求

​ fin: 0 结束,结束会话

227: 滑动窗口大小 2个字节

bc f6: 校验 2个字节

0: 22 2个字节

options: 可选项 12字节

Q: 序号字段,e4 43 42 ea是怎么转换成1的?

A: 序号占用4个字节,使用Mod 2^32算法

Q:什么是socket连接

A:socket是tcp连接的对象,socket=地址:端口号

Q: 为什么要使用端口号?端口号有固定规范吗?

A: 实现运输层的复用和分发,允许多进程在运输层上通信。端口号0-1023是系统端口号,1024-49151是登记端口号,49152-65535是客户端端口号。

三: 网络层

网络层Network Layer)是OSI模型中的第三层(TCP/IP模型中的网际层),提供路由和寻址的功能,使两终端系统能够互连且决定最佳路径,并具有一定的拥塞控制和流量控制的能力。由于TCP/IP协议体系中的网络层功能由IP协议规定和实现,故又称IP层。

​ 网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。服务质量不可靠,如果进程之间的通信需要可靠的服务,那就需要网络中的运输层来负责。

网络层数据报头部

原始数据:

0100 | 0101 | 00 | 00 3f | 70 0d | 40 00 | 3d | 06 | 24 2f | ac 10 3c 60 | c0 a8 00 64

转换数据:

0100 | 0101 | 0x00 | 63 | 0x700d(28685) | 0x4000 | 61 | TCP(6) | 0x242f | 172.16.60.96 | 192.168.0.100

单个解释:

0100: ip协议版本 4位 当前是ipv4版本

0101:首部长度 4位 当前值20bytes

0x00: 区分服务 1字节 一般不使用

63: 总长度 2字节 首部唱的和报文数据长度之和,最大长度为62235

0x700d(28685) : 标识 2字节 ip数据报标识,当数据报长度超过网络MTU被拆分时,标识字段被复制到所有的分片中,为还原数据报提供支持。单个数据报的唯一标识符。

0x4000: 标志 2字节

flags细分:

Reserved bit: 预留位

Don’t fragment: 不能分片

More fragment: 还有分片

Fragment offset: 分片偏移量,当前分片处于数据起始点的什么位置

61: TTL生存时间 1字节 ip数据报在网络中的跳转次数,每经历一个路由,TTL-1(在转发之前-1)

TCP(6): 数据报携带协议 1字节

0x242f: 首部校验和 2字节

172.16.60.96: 源ip地址 4字节

192.168.0.100: 目标ip地址 4字节

Q: 什么是ip地址?为什么使用ip地址而不用物理地址?

A:ip是一个抽象概念,用于定位网络世界上的某个资源。它是互联网上的网络或主机的逻辑地址,以此来屏蔽物理地址的差异,它在网络层和以上各层使用。物理地址是数据链路层和物理层使用的地址。使用ip地址而不使用物理地址,使得管理网络上的资源更加方便。

Q: ip地址的构成

A:

​ 二级地址:网络号:主机号

​ 三级地址:网络号:子网号:主机号

​ 二级地址和三级地址从结构上无法区分,我们可以通过子网掩码来获取网络地址,判断是否有使用子网。所有 网络必须使用子网掩码,以便更好的查找路由表。网络地址 = 目标地址 & 子网掩码

​ CIDR(超网):网络前缀,主机号,ps:127.14.35.1/20,前20位是网络前缀,后12位是主机号

Q:ip数据报是怎么转发的?

A:若目标网络是当前路由器相连网络(是否同一个网络号),则直接交付数据;若非当前网络,根据路由算法,通过路由转发到相连的另一个路由器,重复上述步骤,直到找到指定的网络,交付数据。详细过程极为复杂,在这只做简述,以后补全。

四: 数据链路层

数据链路层最基本的服务是将源计算机网络层传来的数据可靠的传输到相邻节点的目标计算机的网络层,其基本单位是帧。

有别于物理链路,数据链路是一种逻辑链路,它是一种协议/规程。

数据链路层有多种协议,但本质是相同的。封装成帧,透明传输,差错检测。

封装成帧: 将网络层的数据根据协议,添加首尾部,进行封装,如果数据过大,还需要进行分片封装。

透明传输: 帧在传输过程中不会出现数据丢失问题,这要求帧的首尾部使用专门的控制字符,以免和数据重复。

差错检测: 帧在传输之后需要进行数据校验(CRC校验),以保证数据的完整性。

本文采用了以太网帧格式(Ethernet II)

原始数据:

F0 18 98 79 52 f8 | cc 08 fb a9 a8 66 | 08 00 | 6b d1 60 52 | 78 da 6b fb |

转化数据:

Apple_79:52:f8 | Tp-Link_a9:a2:66 | 0x0800 | 6bd16052 | 0x78da6bfb

字段解释:

Apple_79:52:f8: 目标主机mac地址 6字节

Tp-Link_a9:a2:66: 源主机mac地址 6字节

0x0800: ipv4 网络类型 2字节

6bd16052: 帧尾 4字节

0x78da6bfb: 帧校验码 4字节

Q: 什么是以太网?和局域网有什么关系

A: 局域网(Local Area Network,简称 LAN)是广播信道的实现(一对多通信),是连接住宅、学校、实验室、大学校园或办公大楼等有限区域内计算机的计算机网络,相较于广域网,它是一个私有网络。以太网(英语:Ethernet)是一种局域网技术。它使用CSMA/CD协议来保证局域网内同一时间只有一台计算机在发送数据,避免数据干扰。

Q:什么是以太帧?

A:在以太网链路上的数据包称作以太帧以太帧起始部分由前导码和开始符组成。 后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。 的中部是该负载的包含其他协议报头的数据包(例如IP协议)。以太帧有多种格式,本文采用的是Ethernet II。

Q: 为什么需要ip地址转换为mac地址?

A: ip地址是在网络层中定义的,是一种抽象的概念。帧在数据链路层传输,需要明确源地址和目标地址。在网络中,唯一性是由mac地址来确定的(网卡提供)。所以网络层的ip地址需要转换成mac地址。

Q: ip地址是怎么转换为物理mac地址的?

A: 在这里仔细观察,可以发现,从网络层传来的数据,源地址是:172.16.60.96,目标地址是:192.168.0.100,而在数据链路层分别变成了Tp-Link_a9:a2:66和Apple_79:52:f8。这里是通过地址解析协议ARP进行地址转换。

Q: 简述一下ARP协议

A: 在同一个局域网内,源主机根据网络层的ip地址,在本地ARP缓存中查找ip对应的mac地址(由网卡提供,允许有多个网卡),若存在,直接发送给目标主机。若不存在,源主机在局域网中广播一个ARP请求包,局域网中的其他主机收到请去包后,根据本机的ARP缓存进行判断,如果是对应的ip,则把ip和mac地址作为响应包发送给源主机,反之丢弃请求包(ARP请求可能失效)。

Q: 什么是以太网交换机?

A: 以太网交换机,简称交换机,也叫第二层交换机,用于局域网中的帧交换。在局域网中,若环型拓扑连接主机,容易产生数据碰撞,资源利用率低,数据传输效率低。故使用交换机来搭建星型拓扑,所有主机都连接交换机上的一个接口,主机和交换机之间独享一条信道,减少数据碰撞,提高通信效率。

Q: 多个局域网之间如果通信?

A: 需要通过路由器来实现数据转发。

Q: 序号字段,e4 43 42 ea是怎么转换成1的?

A: 序号占用4个字节,使用mod 2 32算法 TOD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值