C/C++基础知识点——linux网络编程

OSI七层模型都有哪些,其中tcp/ip位于哪一层?

物理层、数据链路层、网络层、传输层、会话层、表示层及应用层,其中TCP/UDP位于传输层,而IP位于网络层。

tcp和udp的区别

  1. TCP是流式报文,而UDP是数据包式报文;
  2. TCP是面向连接的,而UDP是面向无连接的;
  3. TCP连接是可靠的,使用流量控制和拥塞控制,而UDP是不可靠的,没有流量和拥塞控制;
  4. TCP是端到端的连接,只支持单播传输,不支持多播或广播传输,而UDP支持一对一,一对多、多对一及多对多连接方式;
  5. TCP首部开销字节至少20,最大是60字节,而UDP开销相对较小,首部开销仅8字节;
  6. TCP多用于可靠传输的应用,如文件传输,而UDP适用于实时应用,如电话、视频传输。

tcp的流量控制和拥塞控制

什么是流量控制:

发送者发送数据过快,而接收者来不及接收,这样会导致分组丢失,为了避免分组丢失,控制发送者发送数据的速度,让接受者来得及接收。

如何控制流量控制:

需采用滑动窗口机制,主要采用接收方返回的ACK响应中包含自己接受窗口的大小,利用窗口大小控制发送方数据的发送。

流量控制引发的死锁,如何解决这种死锁?

当发送者收到了一个窗口为 0 的应答,发送者便停止发送,等待接收者的下一个应答。如果这个窗口不为 0 的应答在传输过程中丢失,发送者会一直等下去,接收方接收不到发送方的应答会持续等待,这样双方相互等待,就造成死锁。

为了避免死锁。TCP使用了持续计时器。每当发送者收到一个0窗口的应答就启动持续计时器,若接受者持续返回0窗口,则重置持续计时器继续等待;若窗口不为0,则表明应答报文丢失了,此时重置发送窗口后开始发送。

拥塞控制:

拥塞控制作用于网络,主要是防止过多的数据注入网络中,避免出现网络负载过大。

常见方法:

  1. 慢开始、拥塞避免;
  2. 快重传、快恢复。

浏览器输入一个url发生了什么

URL解析---》DNS查询—》TCP连接—》处理请求—》接受响应—》渲染页面

get和post的区别

  1. POST相对于GET来说较安全,get请求在浏览器回退时是无害的,而post会再次请求;
  2. Get请求参数会被完整保存在浏览器记录中,而post中的参数不会被保留;
  3. Get请求参数通过URL传递,多个参数通过&连接,post请求放在request body中;
  4. Get只接受ASCII,而post不受限制。

tcp粘包和拆包

粘包:

在socket通讯过程中,如果通讯的一端一次性连接发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送过去;

拆包:

如果通讯的一端发送的数据包超过一次tcp报文所能传输的最大值时,会将一个数据包拆解成多个最大长度的tcp报文分开传输。
指TCP建立连接后双方约定的可传输的最大TCP报文长度,是TCP用来限制应用层可发送的最大字节数。如果底层的MTU是1500byte,则 MSS =1500- 20(IP Header) -20 (TCP Header) = 1460 byte。

出现粘包原因:

  1. 要发送的数据小于TCP发送缓冲区的大小;
  2. 接收数据段没来得及接收缓冲区数据;
  3. 发送数据过快,数据包堆积
posted @ 2023-08-14 16:50  suntl  阅读(49)  评论(0编辑  收藏  举报