C/C++基础知识点——linux网络编程
OSI七层模型都有哪些,其中tcp/ip位于哪一层?
物理层、数据链路层、网络层、传输层、会话层、表示层及应用层,其中TCP/UDP位于传输层,而IP位于网络层。
tcp和udp的区别
- TCP是流式报文,而UDP是数据包式报文;
- TCP是面向连接的,而UDP是面向无连接的;
- TCP连接是可靠的,使用流量控制和拥塞控制,而UDP是不可靠的,没有流量和拥塞控制;
- TCP是端到端的连接,只支持单播传输,不支持多播或广播传输,而UDP支持一对一,一对多、多对一及多对多连接方式;
- TCP首部开销字节至少20,最大是60字节,而UDP开销相对较小,首部开销仅8字节;
- TCP多用于可靠传输的应用,如文件传输,而UDP适用于实时应用,如电话、视频传输。
tcp的流量控制和拥塞控制
什么是流量控制:
发送者发送数据过快,而接收者来不及接收,这样会导致分组丢失,为了避免分组丢失,控制发送者发送数据的速度,让接受者来得及接收。
如何控制流量控制:
需采用滑动窗口机制,主要采用接收方返回的ACK响应中包含自己接受窗口的大小,利用窗口大小控制发送方数据的发送。
流量控制引发的死锁,如何解决这种死锁?
当发送者收到了一个窗口为 0 的应答,发送者便停止发送,等待接收者的下一个应答。如果这个窗口不为 0 的应答在传输过程中丢失,发送者会一直等下去,接收方接收不到发送方的应答会持续等待,这样双方相互等待,就造成死锁。
为了避免死锁。TCP使用了持续计时器。每当发送者收到一个0窗口的应答就启动持续计时器,若接受者持续返回0窗口,则重置持续计时器继续等待;若窗口不为0,则表明应答报文丢失了,此时重置发送窗口后开始发送。
拥塞控制:
拥塞控制作用于网络,主要是防止过多的数据注入网络中,避免出现网络负载过大。
常见方法:
- 慢开始、拥塞避免;
- 快重传、快恢复。
浏览器输入一个url发生了什么
URL解析---》DNS查询—》TCP连接—》处理请求—》接受响应—》渲染页面
get和post的区别
- POST相对于GET来说较安全,get请求在浏览器回退时是无害的,而post会再次请求;
- Get请求参数会被完整保存在浏览器记录中,而post中的参数不会被保留;
- Get请求参数通过URL传递,多个参数通过&连接,post请求放在request body中;
- Get只接受ASCII,而post不受限制。
tcp粘包和拆包
粘包:
在socket通讯过程中,如果通讯的一端一次性连接发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送过去;
拆包:
如果通讯的一端发送的数据包超过一次tcp报文所能传输的最大值时,会将一个数据包拆解成多个最大长度的tcp报文分开传输。
指TCP建立连接后双方约定的可传输的最大TCP报文长度,是TCP用来限制应用层可发送的最大字节数。如果底层的MTU是1500byte,则 MSS =1500- 20(IP Header) -20 (TCP Header) = 1460 byte。
出现粘包原因:
- 要发送的数据小于TCP发送缓冲区的大小;
- 接收数据段没来得及接收缓冲区数据;
- 发送数据过快,数据包堆积
本文来自博客园,作者:suntl,转载请注明原文链接:https://www.cnblogs.com/stlong/p/17628911.html