net

计算机网络总结

计算机网络总结

Posted by julyerr on March 6, 2018

知识总结不是应试,并不会全面涉及到计算机网络各个方面的内容,本文会围绕tcp/ip协议展开,并总结常见的应用层内容。

tcp/ip体系结构 上图是常用的一种网络体系结构化分

IP协议

连接到internet上的主机种类繁多,为了更好进行通信,首先需要标志通信的双方; 但是物理网卡等各个厂家规格参数等不一致,因此需要抽象出一层逻辑地址来标志各个主机(IP地址)

ip地址

A、B、C类地址最为常用,其中下列地址较为特殊(一般不能直接用于地址分配)

  • 127.0.0.1 本地回环地址,不需要跨越主机
  • 255.255.255.255 广播地址,向该地址发送的数据包会转发到本地网络中所有的主机。路由器不会转发广播数据报文,因此广播不能跨网络。
  • 0.0.0.0 常用于寻找自己的IP地址

子网掩码
ipv4的地址数量基本快分配完毕,现在很多厂家都支持ipv6。为了更加有效的分配地址,通常采用主机号借用若干个位作为子网号subnet-id的方式,得到的ip地址格式:IP地址 ::= {<网络号>, <子网号>, <主机号>}.

网络号和子网号全设为1的IP地址为子网掩码,将目的ip与子网掩码相与操作,可以判断通信的主机是否在本网络中。

ARP 和 RARP
arp用于ip地址到硬件地址mac的转换,RARP则用于硬件地址mac到ip的转换。

arp工作流程

为了提高查询效率,主机通常会设置arp列表缓存(通常有一定缓存时间限制); 当目标ip信息能够直接从arp列表中获取,则直接获取到mac; 如果arp列表中无此ip,则主机会发送ARP的广播数据报文; 网路中主机ip为此ip的主机会相应该报文请求,源主机便将对应的arp信息填写到arp列表中。

ip首部格式

上图已经大致标明了各个字段的作用,需要注意的是数据报文的分片操作. 网络上的数据包有一定的长度限制,通常不超过最大传送单元(MTU).如果数据报文太长则需要进行分片,3位标志位(从左到右分别是MF、DF、未用)和13位片偏移则是分片处理用到的:

  • DF(don’t fragment)只有设置0才能允许分片
  • MF(more fragment)表示该数据包之后还有其他的数据包
  • 片偏移量表示该数据包偏离整个报文起始的字节数,便于拼接出完整的报文。

ip特点

  • 并不保证IP数据报能成功地到达目的地,可靠性需要传输层维护
  • 无连接,ip数据包可以不按照顺序发送接收

大端模式和小端模式

  • 大端模式 字节的最高位存储在低地址,最低位存储在高地址
  • 小端模式 字节的最高位存储在高地址,最高位存储在低地址

例如,0x12345678在两种方式存储如下


tcp协议

TCP提供一种面向连接的、可靠的字节流服务。拥有差错检验、超时重传、拥塞控制等特点。

tcp首部

  • 端口号 应用层通过端口号区分
  • 报文段序号 本报文所发送的数据的第一个字节的序号。
  • 确认号 用于对发送方数据的确认,设置为期望收到对方下一个报文段的第一个数据字节的序号
  • 数据偏移 tcp头部有可选项,用于确定数据的起始位置
  • 6个标志位
    • URG:紧急标志位,说明紧急指针有效;
    • ACK:确认标志位,多数情况下空,说明确认序号有效;
    • PSH:推标志位,置位时表示接收方应立即请求将报文交给应用层;
    • RST:复位标志,用于重建一个已经混乱的连接;
    • SYN:同步标志,该标志仅在三次握手建立TCP连接时有效
    • FIN:结束标志,带该标志位的数据包用于结束一个TCP会话。
  • 窗口大小 允许对方发送的数据包的大小,可用于拥塞控制中
  • 检验和
  • 紧急指针 指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。
  • 选项 通信双方属性的设置,如最长报文大小(MaximumSegment Size,MSS)等

tcp 连接和释放

上图已经非常清楚的表示了整个过程双方状态、SYN和FIN等标志位的变化。

面试中常被提及的问题

  1. 三次握手建立过程中为什么还需要额外的一次ack确认? 如果只有两次握手即可建立通信的话,考虑这种情况:
    主机A向主机B发起连接请求M,由于延时等未及时到达主机B,便又一次发起请求N; 请求N正常建立并通信完毕之后,请求M才到达主机B;此时主机B以为是新的建立请求,便发送响应给主机A;但是主机A并未发起新的请求,便不对该响应给予响应,那么主机B上的连接资源便白白浪费。

  2. 四次挥手阶段为什么存在time_wait阶段? 如果最后一次响应丢失,需要保证足够的时间让对方再次发送FIN请求;为了不影响下一次连接,需要足够的时间保证网络中延迟的数据包被丢弃,通常被设置为2MSL;TCP报文段最大生存时间为MSL,其保持2MSL时间可以确保网络上两个传输方向的尚未接收到的、迟到的报文段都已经消失,或被路由器丢弃。

TCP的流量控制
通过滑动窗口进行设置

TCP 拥塞控制 上图展示了,拥塞控制流程:

  • 慢开始 将拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。每经过一个传输轮回,拥塞窗口(发送端)就加倍。
  • 拥塞避免 拥塞窗口大于慢开始门限,每经过一个往返时间就加1,而不是加倍,按线性规律缓慢增长。
  • 快重传算法 拥塞窗口 cwnd设置为慢开始门限 ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大.

udp协议

udp报文首部

下表展示了tcp和udp的区别

tcp和udp各自特点,决定了不同的使用场景

  • 常见使用tcp的应用层协议
    FTP(21)、Telnet(23)、SMTP(25)、POP3(110)、HTTP(80)
  • 常见使用udp的应用层协议
    DNS(53)

应用层

DNS(域名解析服务)

由上文可知,主机通信需要的是逻辑ip地址;ip数字较难记忆,为了便于人使用。通常提供一种将域名转换成ip的服务,例如www.baidu.com对应的ip可能是111.13.101.208

为了减小域名服务器的压力,域名服务架构通常设置成倒挂的树状,最上层为根域名服务器(.),接下来是顶级域名服务器(如.com),一级服务器…本地域名服务器,同样为了提高查询速度,有本地域名缓存等。下图展示了查询www.baidu.com的dns查询过程,注意全世界13台顶级域名服务器的信息有误。

查询有两种方式

CDN(内容分发网络)
作用是将网站的内容发布到最接近用户的“边缘”网络,

各个cdn节点之间的内容是mirror关系,通常存储的是静态数据居多。下面以例子讲述cdn的工作流程:
一个用户访问某个静态文件(如CSS),这个静态文件的域名假如是www.baidu.com,而这个域名最终会被指向CDN全局中CDN负载均衡服务器,再由这个负载均衡服务器来最终分配是哪个地方的访问用户,返回给离这个访问用户最近的CDN节点。之后用户就直接去这个CDN节点访问这个静态文件了,如果这个节点中请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。

HTTP协议是整个web应用的核心,涉及的内容较多。因此放到下一篇文章进行总结。


参考资料