网络编程小节

1.什么是C/S架构?

Client/Server架构,即客户端/服务器架构。是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。

2.互联网协议是什么?分别介绍五层协议中每一层的功能?

互联网协议是TCP/IP协议.

因特网协议栈共有五层:应用层、传输层、网络层、链路层和物理层。不同于OSI七层模型这也是实际使用中使用的分层方式。 [1] 
(1)应用层
支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层协议进行通信。主要的协议有:http、ftp、telnet、smtp、pop3等。
(2)传输层
负责为信源和信宿提供应用程序进程间的数据传输服务,这一层上主要定义了两个传输协议,传输控制协议即TCP和用户数据报协议UDP。
(3)网络层
负责将数据报独立地从信源发送到信宿,主要解决路由选择、拥塞控制和网络互联等问题。
(4)数据链路层
负责将IP数据报封装成合适在物理网络上传输的帧格式并传输,或将从物理网络接收到的帧解封,取出IP数据报交给网络层。
(5)物理层
负责将比特流在结点间传输,即负责物理传输。该层的协议既与链路有关也与传输介质有关。
 
3.基于tcp协议通信,为何建立链接需要三次握手,而断开链接却需要四次挥手?
 
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
 
4.为何基于tcp协议的通信比基于udp协议的通信更可靠?
 
TCP最可靠的方式就是只要不得到确认,就重新发送数据报,直到得到对方的确认为止。
  • [1] 确认和重传机制

    • 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
    • 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传
  • [2] 数据排序

    • TCP有专门的序列号SN字段,可提供数据re-order
  • [3] 流量控制

    • 窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量
  • [4] 拥塞控制

    TCP的拥塞控制由4个核心算法组成。

    • “慢启动”(Slow Start)

    • “拥塞避免”(Congestion avoidance)

    • “快速重传 ”(Fast Retransmit)

    • “快速恢复”(Fast Recovery)

以上就是TCP比UDP传输更可靠的原因。

5.流式协议指的是什么协议,数据报协议指的是什么协议?
 
流式协议指的是TCP协议,数据包协议指的是UDP协议.
 
6.什么是socket?简述基于tcp协议的套接字通信流程.
 
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。
通信流程:
服务端:            客户端:
1.生成socket对象.       1.生成socket对象 
2.绑定ip和端口         2.发起到服务器的连接
3.监听ip和端口         3.服务器接收后,开始发送数据
4.接受客户端连接请求
5.接收数据
 
7.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
 
socket 为提高传输效率,发送方往往要收集到足够多的数据后才发送一次数据给对方。若连续几次需要send的数据都很少,通常TCP socket 会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。

两种情况下会发生粘包:

1.发送端需要等本机的缓冲区满了以后才发送出去,造成粘包(发送数据时间间隔很端,数据很小,会合在一个起,产生粘包)

2.接收端不及时接收缓冲区的包,造成多个包接受(客户端发送一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据 ,就产生粘包)

 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/lovepy3/p/9252325.html