网络多人游戏架构与编程读书笔记(一 网络模型中链路层、网络层、传输层详解)


第一章 一系列的介绍

第二章 互联网

  • 对于五层网络模型来说每一层的功能如下
  1. 接收上一层的数据,添加头部或者尾部进行封装,将数据转发到下一层。
  2. 接收下一层的数据,去掉头部或者尾部进行解封,将数据转发到上一层。

链路层

  • 链路层 传输的数据单元叫。链路层和物理层关系密切,对于不同的物理介质支持有不同的链路层协议。
  • 以太网(Ethernet) 是链路层协议族。可以清晰的描述链路层的功能。如下
  1. 前导序列和帧开始标志由网卡剥离出来。
  2. 以太网给每个主机引入MAC地址`。MAC地址理论上48个比特,前24个由IEEE给网卡厂家,后24网卡厂家自己确定。
  3. 帧长度/帧类型怎么区分呢? 以太网规定帧报文数据最大1500字节也称MTU, 并且还规定帧类型最小值为1536。当这个字段小于1500则表示为帧长度,当这个字段大于等于1536表示帧类型。
  4. 帧检验序列 根据上面一些信息生成的循环冗余值(CRC32)。防止帧半路损坏或者丢了

网络层

  • IP包总长 需要注意就是这个字段。从上图可以知道0-159共160bit,也就是20个字节。IP包总长占16bit。也就是最大65535。所以数据部分最大为65535 - 20 = 65515。
  • ARP协议 网络层向某个IP地址发送数据包时候,通过ARP协议IP地址到MAC地址查询表查询。如果没有对应的MAC地址。则向链路层网络所有可达知己发送ARP报文得到MAC地址。
  • 子网 是IP地址与子网掩码按位与运算结果相同的一群主机,每一个主机都有一个路由表如下。目标子网是目标IP地址所在子网。网关是指当前子网通过链路层发送数据的下一台主机。如果网关为空则表示为直达路由可达的。
  • 分片 上面我们得知链路层帧的MTU=1500字节,而IP数据包长度最大65535。那么从IP层到数据链路层,肯定是不能直接发送这么大的帧的。所以采用了分片。当收集齐所有的分片数据后,才能将数据包传输给上层。

传输层

  • UDP 报头8字节结构如下
  • TCP TCP首部如下
  • 三次握手 这玩意在网络游戏实战那本书已经说了一遍了。但是还是再搞一遍吧。这玩意真的很重要。

  1. 首先主机A发送连接请求,设置Seq=1000。SYN什么意思?标识主机A给主机B说我将要给你发送Seq+1为起始位置的数据流,然后设置主机A的状态SND_UNA=1000(上面有介绍,表示Seq=1000这个报文没有被确认)。
  2. 主机B收到了SYN标志位的数据,设置RCV_NEXT=1001(表示希望主机A下次发送的序号为1001),然后发送SYN-ACK报文。
  3. 然后主机A接收到了SYN-ACK报文。知道了主机B希望他下一次发送的报文序号为1001,所以发送Seq=1001和ACK=3001报文。
  • 数据传输 TCP传输有以下几种控制
  1. 流量控制 TCP报头有个字段叫接收窗口。下面这个图多看几遍就懂了。
    首先主机B回应A的SYN-ACK时,告诉主机A我可以接收300字节的数据。所以主机A最多给B发送3次100字节的数据(分别为Seq=1001,1101,1201这三个报文段)然后就不发了。
    然后主机B在接收到Seq=1001报文然后确认给主机A说我还能接收200字节的数据。但是主机A自己知道后面还有200字节的数据还没到,所以还是没发东西。
    最后 主机B确认了序号seq = 1101的数据报时,接收200字节已经处理掉了50字节,给主机A说我还能接收150字节的东西。然后主机A知道路上还有个Seq=1201报文还在发送中,所以只发送了50字节。
  2. 延迟等待 主机收到TCP报文不立马确认,而是等待500ms或者收到下一个报文。有效的减少了一半的ACK。
  3. 拥塞控制 MSS(最大分段大小) = 1500 - IP头20字节 - TCP头20字节。 首先先设置MSS初始值(一半 为2倍),然后收到一个ACK,MSS加1。一旦数据包丢失MSS直接减少一半。
  4. Nagle算法 在网络实战那本书Socket有设置这个的参数。主要就是发一个TCP报文。最少就是40个头部字节。如果发送数据很小,而且很密集。头部字节占用的带宽会超级大。所以就会等收集足够多的报文后一起发送。
  5. 四次挥手 在网络实战那本书已经说过了,这里粗略讲一下,A是关闭发起者发送FIN,然后进入TIME_WAIT_1阶段,B接收到了FIN将会回应一下A。A收到ACK进入TIME_WAIT_2阶段。等到B没有要发的数据了,他也会向A发送FIN,然后进入LAST_ACK。主机A收到B的FIN后进入TIME_WAIT(一般为4分钟,用于处理主机B重发)阶段,向B发送确认,然后B收到ACK直接关闭。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值