TCP小谈

  • 单工、半双工、全双工:主要发生在路由器的交换机这块功能里。
  • 单工:数据传输只支持一个方向,同一时刻只能有一方接收或发送消息
  • 半双工:数据传输支持两个方向,同一时间只能有一方接收或发送信息。需要先判断是否有数据接入进来,避免发生信号碰撞问题,要等一个方向数据过去了,才能把数据发出去。以太网层面处于半双工工作模式
  • 全双工:数据传输支持两个方向,同一时间可以同时接受和发送信息,双向通信
网络协议:计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。
JSON数据格式描述:数据放置在大括号“{}”中,每个数据项之前都有一个描述的名字(如to等),描述名和数据项之间用冒号(:)分开。JSON是一种轻量级的数据交换格式。所谓的轻量级是与XML文档结构相比而言,描述项目字符少,所以描述相同的数据所需的字符个数要少,那么传输的速度就会提高而流量也会减少。
protobuf协议:google开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。基于二进制格式,需要编码和解码,数据本身不具备可读性,只有反序列化后才能得到可读数据,用于通讯协议和数据存储领域。
protobu优势劣势:
  • 优势:
    • 序列化后体积相比Json和XML很小,适合网络传输
    • 支持跨平台多语言
    • 消息格式升级和兼容性还不错
    • 序列化反序列化速度很快,快于Json的处理速速
  • 劣势:
    • 功能简单,无法表示复杂的概念
    • 通用性较差,为成为行业标准编写工具
    • 以二进制方式存储,需要进行.proto定义,否则没办法直接读出内容

OSI七层协议:
  1. 应用层:提供应用接口,网络服务。如HTTP/HTTPS/FTP/DNS等。
  2. 表示层:应用层数据的编码和转换功能,保证一个系统的应用层发送的数据能被另一个系统的应用层识别,HTML/DOC。
  3. 会话层:负责建立、管理和终止表示层实体之间的通信会话
  4. 传输层:建立主机端到端的链接,为上层协议提供端到端的可靠和透明的数据传输服务,TCP/UDP,进程和进程之间的通信 。
  5. 网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径,IP。
  6. 数据链路层:定义电信号如何分组
  7. 物理层:利用传输介质,实现相邻计算机节点之间比特流的透明传送,如网线,光缆,负责传输0和1的电信号。

TCP/IP协议分层:
应用层:决定向用户提供应用服务时通信的活动,预存了通用的应用服务,如FTP、DNS、HTTP

传输层:提供处于网络连接中的两台计算机之间的数据传输,有TCP和UDP。传输层是负责向应用层提供通信服务的,网络通信的重点并不是主机,而是主机里的进程,传输层和网络层的不同点在于,网络层提供了主机到主机的逻辑通信,传输层提供了程序到程序的逻辑通信。

网络层:处理在网络上流动的数据包,数据包是网络传输的最小数据单位。规定了通过怎样的传输路线到达对方计算机并传送数据包

链路层:处理连接网络的硬件部分

局域网与局域网之间,跨子网通信:

APR原理:每一个主机都在一个ARP高速缓存,里面存放着本局域网上的IP地址和硬件地址(mac地址)的映射关系。
APR工作流程:
  1. 当同一个局域网内的主机A要发给主机B,首先A会从ARP缓存中找到主机B的映射关系,如果有,将其封装成MAC帧发送要目的主机。
  2. 如果没有主机B的映射关系,那么主机A就会在局域网按照如下步骤找到主机B的映射关系:
    1. 主机A在局域网内广播发送一个ARP请求分组,请求分组的内容大概为:我的IP地址是:xxx,我的MAC地址是:xxx,我想知道ip地址(主机B)为:xxx的MAC地址。
    2. 局域网内所有运行ARP进程的主机都会收到该广播,除了主机B外,其他主机都不会响应该请求分组,因为该请求分组的请求内容IP和自己的IP并不一致,会直接丢弃该分组。主机B收下ARP分组后,并将自己的硬件地址写入响应分组中。
    3. 主机A在收到主机B的响应分组后,会将主机B的IP地址和MAC地址的映射关系写入到缓存中(注意:主机A在发送ARP请求分组时,已经将自己的IP地址和MAC地址的映射关系写入其中,主机B在收到ARP请求分组时,会将这个映射关系写入自己的缓存中,因为A向B发送数据,很有可能B也会向A发送数据)。
为什么ARP是在同一个局域网内工作呢?
如果网络A的主机A1发送给网络B的主机B1,主机A1是否应该知道主机B1的MAC地址呢?其实主机A1并不应该知道主机B1的MAC地址,也不应该知道,解析主机B1的MAC是由网络B接入的路由器负责的。

上图的主机H1发送给主机H2,通信路径是:H1—> R1 —> R2 —> H2(R1、R2同时连接两个局域网,因此他们都有两个MAC地址),首先主机H1会解析出路由R1的MAC地址HA3,数据传送到R1后,R1从转发表中找到下一跳路由R2,同时解析出R2的MAC地址HA5,于是IP数据报的数据将通过HA5传送到R2,R2在解析出H2的MAC地址,将IP数据报交付给主机H2。可以看到,不同的局域网之间的主机通信是不需要ARP解析的,而是由其接入的路由负责,地址的解析转换过程对主机的用户是透明的。
最终数据在链路上传输的帧都是通过MAC地址找到目的主机的,那么为什么还需要抽象的IP地址呢?因为全世界的存在着各式各样的网络,他们使用不同的硬件地址,要让这些异构的网络进行通信要进行大量的、复杂的硬件地址转换工作,但是IP将这个问题简单化了,每个主机拥有一个唯一的IP,就可以进行通信。
TCP/IP传输HTTP数据包流程:
当应用程序用 TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息

  1. 对用户请求网址进行DNS域名解析,生成IP地址。
  2. 拿到IP地址后,访问IP地址服务器建立会话连接(通过TCP协议与服务器建立连接),对服务端发起HTTP请求,开始进行数据传输。
  3. 数据传输基于HTTP协议,在数据传输过程中会对HTTP请求的报文进行进一步的处理。
数据传输的过程:
  • 数据到传输层,会对当前数据增加TCP头,表示当前的协议头,使用TCP协议传输
  • 数据到网络层,会对当前数据增加IP头,IP网址是一个网卡在网络中的通讯地址
  • 数据到数据链路层,会对当前数据增加MAC头,表示这个数据包要发送到的网卡地址,MAC地址是全局唯一
  • 数据到物理层,将当前数据转化成比特流进行传输
4.当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用:

分用过程:
  • 在物理层,数据通过接收端网卡时,判断数据是否需要进来
  • 在数据链路层,摘取MAC头,检测MAC地址和接收端网卡的MAC是否匹配
  • 在网络层,摘取IP头,判断IP地址是否匹配,不是就转发,继续交给上层处理
  • 在传输层,摘取TCP头,通过TCP携带的端口号,将报文给接收端,指定端口的进程进行处理
5.通过分用后,数据到达服务端,服务器端对数据进行处理后,响应结果给客户端
6.服务器关闭TCP连接
为什么有了 MAC 层还要走 IP 层呢?知道一个设备mac地址,可以知道设备的一些信息,但无法知道设备的具体位置,不能在网络中将数据发送给它。要实现机器之间的通信,还需要有 ip 地址。ip 地址表达的是当前机器在网络中的位置。通过 ip 层的寻址,我们能知道按何种路径在全世界任意两台 Internet 上的的机器间传输数据
posted @ 2025-04-16 18:24  难得  阅读(33)  评论(0)    收藏  举报