计算机网络的学习_互联网和传输协议(1)

三种常见网络在这里插入图片描述

公司内网

公司网络从本地网络服务提供商(ISP)接入,然后内部再分成一个个子网。图中看到的线路,被称作通信链路,用于传输网络信号。当有的网络节点,同时接入了 2 条以上的链路,这个时候因为路径发生了分叉,数据传输到这些节点需要选择方向,因此我们在这些节点需要进行交换(Switch)
在这里插入图片描述
交换技术的本质是让数据切换路径,因此这个技术也称作封包交换技术
常见的具有交换能力的设备是路由器和链路层交换机,两个网络可以通过路由器进行连接,多台设备可以通过交换机进行连接

移动网络

在移动网络中,无线信号构成了通信链路。通信的核心被称作蜂窝塔(基站),每个蜂窝塔只覆盖一个六边形的范围。

随着移动网络的发展,一个蜂窝网格中的设备越来越多,也出现了基站覆盖有重叠关系的网格。好处是当一个基站过载、出现故障,或者用户设备周边信号出现不稳定,就可以切换到另一个基站的网络,不影响用户继续使用网络服务

家用网络

路由器承担了链路层网关的作用,作为家用电器之间信息的交换设备

数据的传输

几个概念:

  • 最终提供服务或者享受服务的设备,称为终端(Terminal),或者端系统(End System),有时候简单称为主机(Host)。比如说:电脑、手机都可看作是主机
  • 端到端(Host-to-Host)的网络传输能力:由 TCP/IP 协议群提供
  • 一对多、多对多的网络传输能力:以看作是端到端能力的延伸

传输层协议 TCP

(HTTP协议、TCP协议、IP协议分别在应用层,传输层,网络层工作)
TCP(Transport Control Protocol)是一个传输层协议,提供 Host-To-Host (端到端)的数据的可靠传输,支持全双工,是一个连接导向的协议
TCP 协议往上是应用到应用的协议,微信的聊天协议就是应用到应用的协议;如果微信的聊天协议想要工作,就需要一个主机到主机的协议帮助它实现通信
在这里插入图片描述

各层作用

  • 应用层:使用得到的报文段,为用户提供各种服务
  • 传输层:正确的将数据报交付相应的应用程序(不同端口对应不同程序)
  • 网络层:负责不相邻的两个节点间的通信,用IP地址识别源地址、目的地址
  • 数据链路层:负责相邻设备间通信,用MAC地址识别参与通信的两个节点(源节点、目的节点)
  • 物理层:发送和接收比特流

MAC地址

MAC地址就是在媒体接入层上使用的地址,也叫物理地址
物理地址是数据链路层和物理层使用的地址。而IP地址是网络层及其以上层使用的地址

互联网协议群(TCP/IP协议群)的主要概念的解释

主机到主机( Host-To-Host)为应用提供应用间通信的能力

  • 应用层中:TCP 上层的应用层协议使用 TCP 能力的时候,需要告知 TCP 是哪个应用。这就是端口号的作用,端口号用于告诉TCP是哪个应用
  • TCP 要实现主机到主机通信,就需要知道主机们的网络地址(IP 地址),但是 TCP 不负责实际地址到地址(Address-To-Address)的传输,因此 TCP 协议把 IP 地址给底层的互联网层处理
  • 互联网层(网络层):互联网层提供的是地址到地址的通信,不负责信号在具体两个设备间传递,IP 协议就在这一层工作
  • 链路层:网络层会调用下方的链路层在两个相邻设备间传递信息
  • 物理层:物理层封装最底层的物理设备、传输介质等,由最下方的物理层提供最底层的传输能力

连接与会话

会话是应用层的概念,连接是传输层的概念

  • 连接(Connection):连接是数据传输双方的契约;目标是让两个在通信的程序之间产生一个默契,保证两个程序都在线,而且尽快地响应对方的请求;连接是网络行为状态的记录(双方IP和端口是多少,状态是否健康等)
  • 会话:会话是应用的行为。有些会话会自动重连(也就是重新创建连接),或者帮助创建连接。 此外,会话也负责在多次连接中保存状态。

双工/单工问题

  • 单工:在任何一个时刻,数据只能单向发送,只需一条线路
  • 半双工:在某个时刻数据可以向一个方向传输,也可以向另一个方向反方向传输,而且允许交替进行。至少需要一条线路
  • 全双工:任何时刻数据都可以双向收发,需要大于一条线路

TCP 是一个双工协议,数据任何时候都可以双向传输,所以客户端和服务端在TCP中是平等的,都叫host

TCP的可靠性

可靠性即TCP保证数据无损传输:如果发送方按照顺序发送,然后数据无序地在网络间传递,就必须有一种算法在接收方将数据恢复原有的顺序

TCP的握手和挥手

TCP 是一个连接导向的协议,设计有建立连接(握手)和断开连接(挥手)的过程

TCP协议的基本操作

  • 如果一个 Host 主动向另一个 Host 发起连接,称为 SYN,请求同步;

  • 如果一个 Host 主动断开请求,称为 FIN,请求完成;

  • 如果一个 Host 给另一个 Host 发送数据,称为 PSH(Push),数据推送

接收方收到数据后,都需要给发送方一个 ACK响应。请求/响应的模型是可靠性的要求,如果一个请求没有响应,发送方可能会认为自己需要重发这个请求

TCP为什么握手是3次、挥手是4次

建立连接的过程(三次握手)

因为要保持连接和可靠性约束,TCP 协议要保证每一条发出的数据必须给返回,返回数据叫作 ACK(也就是响应)
过程一共6步,包含3次握手:
1.(第一次握手) 客户端发消息给服务端,即SYN
2. 服务端准备好进行连接
3. 服务端针对客户端的SYN给一个ACK
4. 服务端发送一个SYN给客户端
(第二次握手)这里的步骤3和4可以合并成一条数据传递给客户端,算一次握手
5. 客户端准备就绪
6. (第三次握手)客户端给服务端发送一个ACK
在这里插入图片描述
SYN、ACK、PSH 这些常见的标识位(Flag)在传输中表示方法:
为 TCP 协议增加协议头,在协议头中取多个位(bit),其中 SYN、ACK、PSH 都占有 1 个位。比如 SYN 位,1 表示 SYN 开启,0 表示关闭。因此,SYN-ACK 就是 SYN 位和 ACK 位都置 1。这样的设计也称为标识(Flag)

断开连接的过程(4次挥手)

客户端要求断开连接的步骤

  1. (第一次挥手)客户端发送一个断开请求FIN
  2. (第二次挥手)服务端收到客户端的FIN请求,并给客户端一个ACK
    这里由于服务端还有未释放资源等原因,不能马上回给客户端一条FIN,所以这里的步骤2和3不能合并成一条数据
  3. (第三次挥手)服务端发送一条FIN给客户端
  4. (第四次挥手)客户端接受到FIN后,然后客户端完成一些自己的请求,再给服务端发送一个ACK

总结

  • TCP提供的是连接,让双方的传输更稳定,而TCP没有提供会话,会话通常在TCP连接上进一步封装,在应用层提供
  • TCP 是一个面向连接的协议,即 TCP 协议参与的双方(Host)在收发数据之前会先建立连接。而 UDP 协议 是一个面向数据的协议——协议双方不需要建立连接,直接传送报文(数据)
  • 连接需要消耗更多的资源,如游戏、视频等使用连接协议是不合理的
  • 三次握手、四次挥手的原因:

TCP 是一个双工协议,接双方都需要向对方发送 SYC(同步请求)和 ACK(响应)。握手阶段,信息接收方可以将自己的 ACK 和 SYN 打包作为一条消息回复,因此是 3 次握手。挥手阶段,双方都可能有未完成的工作。收到挥手请求的一方,必须马上响应(ACK),最后等所有工作结束,再发送请求中断连接(FIN),因此是 4 次挥手

TCP的封包格式(TCP 的粘包和拆包)

TCP最大的特点就是其可靠性,让数据无损送达
而TCP 是一个传输层协议。TCP 发送数据的时候,往往不会将数据一次性发送
所以TCP 的粘包和拆包就是指一个完整的包可能会被TCP拆分成多个包进行发送 ,也有可能把多个小的包封装成一个大的数据包发送

  • 拆包:数据经过拆分,然后传输,然后在目的地重组
  • 粘包:发往一个目的地的多个数据太小了,为了防止多次发送占用资源,TCP 协议有可能将它们合并成一个 TCP 段发送,在目的地再还原成多个数据

而且TCP中有缓冲区的概念(内存中开辟的一块区域,目的是缓冲),若要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;大于缓冲区则相反

原因

  • 稳定性,一次发送的数据越多,出错的概率越大。
  • 效率,网络中有时候存在着并行的路径,拆分数据包就能更好地利用这些并行的路径

拆包获得数据,有可能不是按顺序到达的,这时候发出的每一个 TCP 段都需要有序号(Sequence Number),虽然得到的是乱序的 TCP 段,但是可以通过 Seq 进行排序

UDP协议

UDP协议有在传输层提供直接发送报文(Datagram)的能力
TCP 协议的核心目标是提供可靠的网络传输,而 UDP 的目标是在提供报文交换能力基础上尽可能地简化协议轻装上阵

UDP应用场景

  • 网络游戏
  • 音视频传输
  • 广播

DNS

DNS即域名系统,是实现域名和IP地址相互映射的一个分布式数据库
例如淘宝www.taobao.com需要转化成101.89.125.239(IPV4)或240e:e1:f300:1:3::3f9(IPV6)这样的IP地址才能准确读取

输入一个网址,执行过程是怎样的

  1. 浏览器通过DNS解析域名对应的IP地址,通过这个IP地址找到客户端到服务器的路径,客户端浏览器发起一个HTTP会话到,然后通过TCP进行封装数据包,输入到网络层
  2. 在传输层中:HTTP会话会被分成报文段,添加源、目的端口
  3. 客户端的网络层主要做的是通过查找路由表确定如何到达服务器(IP的重要功能是寻址和路由)
  4. 客户端的链路层,包通过链路层发送到路由器 ?

Guess you like

Origin blog.csdn.net/Maybe_do_it/article/details/120965562