2024-07-10 13:25:53 +08:00
|
|
|
|
物理层:
|
|
|
|
|
它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。
|
|
|
|
|
数据链路层:
|
|
|
|
|
单纯的0和1没有任何意义,所以我们使用者会为其赋予一些特定的含义,规定解读电信号的方式
|
|
|
|
|
一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。
|
|
|
|
|
其中"标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;“数据"则是数据包的具体内容。
|
|
|
|
|
以太网规定,连入网络的所有设备都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。
|
|
|
|
|
每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。
|
|
|
|
|
前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。
|
|
|
|
|
网络层:
|
|
|
|
|
必须找到一种方法区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。这就导致了"网络层"的诞生。
|
|
|
|
|
它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。
|
|
|
|
|
规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。目前,广泛采用的是IP协议第四版,简称IPv4。
|
|
|
|
|
IPv4这个版本规定,网络地址由32个二进制位组成,我们通常习惯用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。
|
|
|
|
|
传输层:
|
|
|
|
|
我们如何区分某个数据包到底是归哪个程序的呢?
|
|
|
|
|
也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口”(port),它其实是每一个使用网卡的程序的编号。
|
|
|
|
|
每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
|
|
|
|
|
“端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。有了IP和端口我们就能实现唯一确定互联网上一个程序,进而实现网络间的程序通信。
|
2024-07-10 19:46:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TCP服务端程序的处理流程:
|
|
|
|
|
|
|
|
|
|
1.监听端口
|
|
|
|
|
2.接收客户端请求建立链接
|
|
|
|
|
3.创建goroutine处理链接。
|
|
|
|
|
|
|
|
|
|
一个TCP客户端进行TCP通信的流程如下:
|
|
|
|
|
|
|
|
|
|
1.建立与服务端的链接
|
|
|
|
|
2.进行数据收发
|
|
|
|
|
3.关闭链接
|
|
|
|
|
|
|
|
|
|
TCP粘包
|
2024-07-12 00:41:03 +08:00
|
|
|
|
主要原因就是tcp数据传递模式是流模式,在保持长连接的时候可以进行多次的收和发。
|
|
|
|
|
|
|
|
|
|
“粘包"可发生在发送端也可发生在接收端:
|
|
|
|
|
|
|
|
|
|
由Nagle算法造成的发送端的粘包:Nagle算法是一种改善网络传输效率的算法。简单来说就是当我们提交一段数据给TCP发送时,TCP并不立刻发送此段数据,而是等待一小段时间看看在等待期间是否还有要发送的数据,若有则会一次把这两段数据发送出去。
|
|
|
|
|
接收端接收不及时造成的接收端粘包:TCP会把接收到的数据存在自己的缓冲区中,然后通知应用层取数据。当应用层由于某些原因不能及时的把TCP的数据取出来,就会造成TCP缓冲区中存放了几段数据。
|
2024-07-10 19:46:50 +08:00
|
|
|
|
引申知识点:
|
|
|
|
|
大端和小端{https://zhuanlan.zhihu.com/p/680366680}
|