course/networkProgram/NetworkProgram.log

42 lines
3.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

物理层:
它主要规定了网络的一些电气特性作用是负责传送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和端口我们就能实现唯一确定互联网上一个程序进而实现网络间的程序通信。
TCP服务端程序的处理流程
1.监听端口
2.接收客户端请求建立链接
3.创建goroutine处理链接。
一个TCP客户端进行TCP通信的流程如下
1.建立与服务端的链接
2.进行数据收发
3.关闭链接
TCP粘包
主要原因就是tcp数据传递模式是流模式在保持长连接的时候可以进行多次的收和发。
“粘包"可发生在发送端也可发生在接收端:
由Nagle算法造成的发送端的粘包Nagle算法是一种改善网络传输效率的算法。简单来说就是当我们提交一段数据给TCP发送时TCP并不立刻发送此段数据而是等待一小段时间看看在等待期间是否还有要发送的数据若有则会一次把这两段数据发送出去。
接收端接收不及时造成的接收端粘包TCP会把接收到的数据存在自己的缓冲区中然后通知应用层取数据。当应用层由于某些原因不能及时的把TCP的数据取出来就会造成TCP缓冲区中存放了几段数据。
引申知识点:
大端和小端{https://zhuanlan.zhihu.com/p/680366680}