查看原文
其他

网络基础(下篇)

孙超 金科优源汇 2020-09-02

作者 | 孙超

编辑 | 徐广欣




tips2:运输层网络协议、应用层网络协议、网络相关参考资料~



4. 运输层

运输层提供的是应用进程间的逻辑通信,并不是真正在两个运输层之间直接传递数据。具有复用和分用的功能。屏蔽了下层网络层的细节。通过协议端口号(Protocol port number) 确定具体的应用进程,16位(2个字节)。

  • 复用:在发送方不同的应用进程都可以使用同一个运输层协议传送数据。

  • 分用:接收方的运输层在剥去报文的首部后能够把这些数据正确的交付目的应用进程。


a. 用户数据报协议 UDP


UDP在IP数据报的基础上添加了复用和分用的功能。主要特点:
  • 无连接。

  • 尽最大努力交付。

  • 面向报文的。对于应用层的报文,添加首部后就直接交付IP层。

  • UDP没有阻塞控制,网络阻塞不会使源主机的发送速率降低。IP电话会中断,但不会延迟。

  • 支持一对一、一对多、多对一和多对多的交互通信。

  • 首部开销小,只有8个字节。TCP有20个字节。首部由四个字段组成,每个字段2个字节。

  • 源端口:在需要对方回信时选用。不需要时为0。

  • 目标端口:在终点交付报文时必须使用。

  • 长度:UDP报文的长度,最小值只有8,即仅有首部。

  • 检验和:检测UDP在传输时是否有错。

b. 传输控制协议 TCP



TCP 协议是面向连接的、端对端的(endpoint to endpoint)、提供可靠交付、全双工通信并且面向字节流的协议。

  • 面向连接

应用程序在每一次使用TCP协议前,必须先建立 TCP 连接,当数据传输完毕后,释放已建立的连接。整个过程分为三个阶段。


  • 连接端点(endpoint),叫做套接字 Socket,即 :Socket =(IP地址:端口号)。TCP连接 = (socket1, socket2) ==> (ip1:port1, ip2:port2)。

  • 建立连接

  • 传输控制块

    TCP模块中有一个TCB(传输控制模块,Transmit Control Block),它用于记录tcp协议运行过程中的变量。对于有多个连接的tcp,每个连接都有一个tcb。tcb结构的定义包括这个连接使用 的源端口[1]、目的端口、目的ip、序号、应答序号、对方窗口大小、己方窗口大小、tcp状态、top输入/输出队列[2]、应用层[3]输出队列、tcp的重传有关变量。


  • 三次握手

    客户A向B发送报文请求,TCP首部 SYN=1,携带一个初始序号 seq=x。此时 SYN=1 情况下,不能携带数据,但消耗一个序号。当前 TCP client 进程的状态 SYN-SENT(同步已发送)。(第一次握手)2.服务器B收到请求,同意建立连接,向A发送确认,确认报文 SYC=1,ACK=1,确认号是 ack=x+1,并携带一个初始序号 seq=y,不能携带数据,但消耗一个序号。当前 TCP 服务进程的状态是 SYN-RCVD(同步已接收)。(第二次握手)3.TCP Client 进程收到 B 的确认后,再次向 B 发送确认。ACK=1,确认号是 ack=y+1,序号 seq=x+1。(可携带数据,也可不携带【不消耗序号,下一个序号仍是 seq=x+1】),A 进入 ESTABLISHED 状态。B收到确认后也进入 ESTABLISHED 状态。(第三次握手)


  • 释放连接(四次握手)

1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据发送。
2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

  • TCP 状态机

  • 方框:TCP状态。

  • 箭头:状态变迁。

  • 箭头旁边的字:1.引起状态变迁的原因。2.发生状态变迁后出现的动作。

  • 粗实线箭头:客户进程的正常变迁。

  • 粗虚线箭头:服务器进程的正常变迁。

  • 细线箭头:异常变迁。

  • 全双工通信

    TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据。

  • 面向字节流

    流入到进程或从进程流出的字节序列。一个TCP报文段包含很多的字节序列。

  • TCP报文段首部信息

  • 源端口和目标端口:各占2个字节

  • 序号 seq

占4个字节,共2^32个序号,即4294967296个序号。当序号到达 **2^32 - 1** 后,下一个序号为0。也称为 “报文段序号”,是所发送的数据的第一个字节的序号。
seq=301,len(data)=100, 下一次seq=401
  • 确认号 ack

    占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。确认号N表明,N-1的所有数据都已经正确收到。

数据长度 100A -> B --> seq = 201B ack --> ack = seq + len(data) = 301
  • 数据偏移

    占4位,TCP报文段中,首部的长度。即,数据起始位置 到 报文起始位置 的距离。

  • 保留

    占6位,为日后使用,目前都是0。

  • 控制位6个

  • URG,数据指针紧急程序,1最高。

  • ACK,当ACK=0,ack 无效,ACK=1时,有效。建立连接后所有发送的报文段必须设置ACK=1。

  • SYN,SYN=1 表示一个连接请求报文(SYN=1,ACK=0) 或 一个连接接收报文(SYN=1,ACK=1)。

  • FIN,用来释放一个连接。FIN=1,报文段的放送方数据已经发送完毕,并要求释放连接。

  • RST,复位。RST=1,TCP连接中出现差错,必须释放连接,然后重新建立运输连接。

  • 窗口,也叫接收窗口,放送方允许对方发送的数据量(自己的接收能力)。是接收方让发送方设置其发送窗口的依据。


    ack=701, window=1000 --> 放送方从701号起,还能接收1000个字节数据的接收缓存空间。
  • 传输原理

IP层的传输是尽最大努力交付的,那么就无法保证可靠传输。而 TCP 协议会通过适当的措施使得两个运输层之间的通信变得可靠。

  • 停止等待协议

    每发送完一个分组就停止发送,等待对方的确认。此协议简单,但信道利用率太低。


  • 超时重传

    发送方在发送分组后,超过一定的时间没有收到确认,因此需要重新发送分组。具体实现是在每发送完一个分组设置一个超时计时器。超过计时器没有收到确认,就重传;收到确认,清楚计时器。


  • 每次发送后,暂存发送的副本。

  • 分组的发送和确认都必须进行编号。为了定位具体的分组。

  • 超时计时器设置的时间应该比 RTT 时间长,因为网络的不确定性。

  • 流水线传输

    为了提高传输效率,发送方可连续发送多个分组,不必每发完一个分组就停止发送等待接收方的确认。


主要使用的协议有:
  • 连续ARQ协议

发送方维持一份发送窗口(每个窗口中有多个按序号连续的分组),窗口内的分组可以连续发送,不需要等待接收方的确认。接收方采用**累积确认**的方式。在收到几个分组后,对按序到达的最后一个分组发送确认。表示:到这个分组为止的所有分组都已经正确的收到了。

  • 滑动窗口协议

    滑动窗口以字节为单位,主要依据 确认号ack 和 窗口。

A 收到 B 的确认, ack=31,窗口=20为收到B确认,A连续发送窗口的数据,但要缓存,为了超时重传。由于网络损耗,A的发送窗口应该要 <= B的接收窗口。不按序到达的数据,先临时存放到接收窗口中,等为接收的字节流收到后,再按序交付。
  • 流量控制

    让发送方的发送速率不要太快,使接收方来的及接收。发送窗口 <= 接收窗口。

  • 拥塞控制

    防止过多的数据进入网络,使路由器或链路不致过载。是全局性的控制。

在某段时间内,对网络上某个资源的的需求超过了该资源所能提供的可用部分时,网络的性能下降,出现**拥塞**,整个网络的吞吐量下降。当 **吞吐量=0** 时,网络无法工作,成为 **死锁。**

5. 应用层

每个应用层协议都是为了解决某一类具体的问题,问题的解决要通过位于不同主机上的多个应用进程之间的通信和协同工作来完成。应用层的具体内容就是精确的定义这些通信规则(协议)。应用层的许多协议都是基于Client-Server方式的。Client 是服务的请求方,Server 是服务的接收方。


a. DNS


域名解析系统,一个联机分布式数据库系统,将主机的名字解析成IP地址。

DNS域名服务器的分布结构是呈树状分布的。

域名的解析过程:
  • 主机向本地DNS服务器的查询一般都采用递归查询。

  • 本地DNS服务器向根DNS服务器查询一般采用迭代查询。

  • 具体步骤

  • 高速缓存DNS,存放最近查询过的域名以及从何处获取域名映射的记录。


b. FTP


文件传输协议。提供交互式的访问,允许客户指明文件的类型和格式,允许文件具有访问权限(认证)。

  • 工作原理

    一个FTP服务器进程分为两大部分:

  • 主进程:一个进程,负责接收新的请求。工作步骤如下:

  1. 打开21端口

  2. 等待Client请求连接。

  3. 启动从属进程来处理Client的请求。从属进程处理完毕后就终止。

  4. 回到等待状态。

  • 从属进程:多个进程,负责处理单个请求,并发的。文件传输时,建立两个 TCP 连接,控制连接 和 数据连接


c. TELNET

远程终端协议,或终端仿真协议。使用 telnet 可以通过 TCP 连接注册到远程主机。


d. 万维网 www

简称 web,是一个大规模的、联机式的信息存储所。即,分布式的超媒体系统,是超文本的扩展。其中,超文本指的是包含指向其他文档的链接的文本。
主要包含:
  • URL,统一资源定位符。<协议>://<主机>:<端口>/<路径>。

  • HTTP协议,超文本传输协议。

  • HTML

  • 代理服务器

    WWW的高速缓存。将最近的一些请求和响应暂存在本地磁盘。加快访问速度。

e. DHCP


动态主机配置协议(Dyna Host Config Protocol),Client - Server。对与 Server 的固定位置的计算机指派一个永久的地址(IP地址),机器重启后地址不变

  1. 主机A启动时,向DHCP中继代理服务器广播发送报文。数据报中源地址都是0,目标地址都是1。

  2. DHCP中继代理服务器将报文以单播的方式转发到 DHCP服务器,等待答复。

  3. DHCP服务器分配给DHCP客户的IP地址是临时的,租用期(lease period)有DHCP服务器决定。



三. 参考资料


•网络编程:https://blog.csdn.net/maydaysar/article/details/58204104

References

[1] 源端口: https://baike.baidu.com/item/%E6%BA%90%E7%AB%AF%E5%8F%A3
[2] 队列: https://baike.baidu.com/item/%E9%98%9F%E5%88%97
[3] 应用层: https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E5%B1%82



关注我们


让我知道你在看

猜您喜欢往期精选▼

1. 敏捷,是一种方式,更是一种态度

2. 图表示学习介绍

3. 网络基础(上篇)





    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存