Network(TCP)

TCP握手挥手 TCP TCP 是面向连接的、可靠的、基于字节流的传输层通信协议 面向连接:一定是「一对一」才能连接,不能像 UDP 协议一个主机同时向多个主机发送消息 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端 字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序不知道「消息的边界」,无法读出一个有效的用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃 TCP连接 用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接 Socket:由 IP 地址和端口号组成 序列号:用来解决乱序问题等 窗口大小:用来做流量控制 TCP与UDP区别 1. 连接 TCP 是面向连接的传输层协议,传输数据前先要建立连接。 UDP 是不需要连接,即刻传输数据。 2. 服务对象 TCP 是一对一的两点服务,即一条连接只有两个端点。 UDP 支持一对一、一对多、多对多的交互通信 3. 可靠性 TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。 UDP 是尽最大努力交付,不保证可靠交付数据。但是可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议 4. 拥塞控制、流量控制 TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。 UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。 5. 传输方式 TCP 是流式传输,没有边界,但保证顺序和可靠。 UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。 6. 分片不同 TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。 UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层 传输层的「端口号」是为了区分同一个主机上不同应用程序的数据包 传输层两个传输协议 TCP 和 UDP,在内核中是两个完全独立的软件模块...

网络基础

网络模型 同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式 不同设备上的进程间通信,需要网络通信,而设备是多样性的,协商出了一套通用的网络协议 TCP/IP网络模型 应用层 最上层的,也是我们能直接接触到的,应用就把应用数据传给下一层,就是传输层 应用层为用户提供应用功能,比如 HTTP、FTP等 传输层 传输层会有两个传输协议,分别是 TCP 和 UDP TCP:大部分应用使用的正是 TCP 传输层协议,比如HTTP。TCP有流量控制、超时重传、拥塞控制等,为保证数据包能可靠地传输给对方 UDP:只负责发送数据包,不保证数据包是否能抵达对方,它实时性相对更好,传输效率也高 应用需要传输的数据可能会非常大,当传输层的数据包大小超过 MSS(TCP 最大报文段长度),将数据包分块,这样即使中途有一个分块丢失或损坏了,只需要重新发送这一个分块 MTU:一个网络包最大长度,以太网中一般为 1500 字节。 MSS:除去 IP 和 TCP 头部后,一个网络包所能容纳的 TCP 数据的最大长度。 传输层负责把数据包传给应用,但一台设备上会有很多应用接收或者传输数据,用编号将应用区分开来,这个编号是端口 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的 对于浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号 网络层 传输层协议处理太多的事情,只需要服务好应用即可;而实际的传输功能就交给下一层,也就网络层,负责将数据从一个设备传输到另一个设备 IP 协议将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文;如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文 IP 地址给设备进行编号 IPv4 协议, IP 地址共 32 位,分成了四段(比如192.168.100.1),每段是8位 将 IP 地址分成两种意义: 网络号,负责标识该 IP 地址是属于哪个「子网」的; 主机号,负责标识同一「子网」下的不同主机 配合子网掩码才能算出 IP 地址 的网络号和主机号 比如 10....