目录
客户端发“hello”经过OSI每一层都加一个协议头,封装成报,通过连接到互联网,物理层发送到服务端,接到后,再把一层层头去掉,得到“hello”
面试问OSI或TCP/IP,怎么回答?
HTTP协议请求时,有请求头,响应头
客户端首先发一个请求协议,发送到服务端回一个响应协议
带宽计算 运营商 比特 个体 字节
通讯协议
IP协议 用于网络定位的一个数据串
TCP协议
- 服务器开始接收
- 客户端发送连接请求
- 如果达到服务端,服务端给相应
面试问HTTP?
面试问Get类型,Pot类型区别?
如果需要在URL传递数据中加入特殊字符,需要对数据进行URL编码
TCP长连接
面试什么是Socket套接字?
TCP编程方式(c#)
连接(三次握手)——>断开(四次挥手)——>监听,绑定(服务器开发)——>接收——>发送
发送数据含头部信息,网卡里有缓存,累积之后再发怎么处理
数据包处理
面试问什么是数据粘包?
粘包产生原因?
面试问什么是数据分包?
分包产生的原因就简单的多:
粘包与分包的处理方法:
一个是采用分隔符的方式,即我们在封装要发送的数据包的时候,采用固定的字符作为结尾符(数据中不能含结尾符),这样我们接收到数据包后,如果出现结尾标识,即人为的将粘包分开,如果一个包中没有出现结尾符,认为出现了分包,则等待下个包中出现后 组合成一个完整的数据包,这种方式适合于文本传输的数据,如采用/r/n之类的分隔符;
另一种是采用在数据包中添加长度的方式,即在数据包中的固定位置封装数据包的长度信息(或可计算数据包总长度的信息),服务器接收到数据后,先是解析包长度,然后根据包长度截取数据包(此种方式常出现于自定义协议中),但是有个小问题就是如果客户端第一个数据包数据长度封装的有错误,那么很可能就会导致后面接收到的所有数据包都解析出错(由于TCP建立连接后流式传输机制),只有客户端关闭连接后重新打开才可以消除此问题,我在处理这个问题的时候对数据长度做了校验,会适时的对接收到的有问题的包进行人为的丢弃处理(客户端有自动重发机制,故而在应用层不会导致数据的不完整性);
为什么UDP没有粘包?
打包
对原始数据添加协议头的过程
解包
接收到数据包时,读取包头,并记录信息,获取到包内原始数据的过程
一组数据包的声明周期过程?
数据包定制
包头:记录有关于整个数据包的信息(可加密)
包体:原始数据(可加密)
字节序(存在于数字存储方法)
小端字节序:将数据的后位字节,放在内存栈的低地址位
大端字节序:将数据的后位字节,放在内存栈的高地址位
主机字节序:当前计算机数字的字节表示方式
网络字节序:互联网规定,传递数据时,都转大端字节序
字符串内有字节序问题,它受字符编码影响