1. 网络分层结构
网络结构分为三种
-
OSI七层模型
分为应用层、表示层(加解密,压缩解压缩,编码解码)、会话层(管理应用程序之间的会话)、传输层、网络层、数据链路层、物理层
-
TCP/IP四层模型
分为应用层(对应OSI中的应用层、表示层、会话层)、传输层、网络层、网络接口层(对应OSI中数据链路层和物理层)
-
五层模型(较多)
分为应用层、传输层、网络层、数据链路层、物理层
- 应用层:为应用程序提供交互服务,定义了信息交换的格式,数据单元称为报文,如DNS、SMTP、HTTP协议
- 传输层:负责向两台主机进程间的通信提供数据传输服务,如传输控制协议TCP和用户数据协议UDP
- 网络层:选择合适的路由和交换节点,确保数据及时传送,如IP协议
- 数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层传下来的IP数据报组装成帧,在两个相邻节点的链路上传送帧
- 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异
2. TCP与UDP的区别
3. TCP是如何实现数据的可靠性
通过校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制等机制保证可靠性
-
校验和
由源IP地址、目标IP地址、TCP报文长度(报头+数据)、协议类型、保留字组成伪首部,共12字节
发送方在发送数据前进行校验和计算,接收方收到数据后计算校验和对比发送方的校验和是否一样。
4. 三次握手
1. 第一次握手
客户端随机生成一个序列号x,置标志位SYN=1,序列号seq=x,然后发送报文给服务端
第一次握手前客户端状态为CLOSE,第一次握手后客户端为SYN-SENT,服务端状态为LISTEN。
2. 第二次握手
服务端在收到客户端的报文后随机生成序列号y,然后回复给客户端报文,标志位SYN=1,ACK=1,seq=y,ack=x+1。
第二次握手前服务端状态为LISTEN,第二次握手后服务端状态为SYN-RCVD(RCVD是received的缩写,表示已经接收到),客户端状态为SYN-SENT
3. 第三次握手
客户端在收到服务端报文后会再向服务端发送报文,标志位ACK=1,ack=y+1,seq=x+1。
第三次握手前客户端状态为SYN-SENT,第三次握手后客户端和服务端都变成ESTABLISHED
5. 两次握手可以吗?
不可以,第三次握手主要是为了防止历史连接初始化新连接。
可能会出现客户端A发送一个连接请求后由于网络问题没有收到应答于是又发送了一个连接请求,然后连接完毕传完数据后断开连接,某个时间第一次发送的连接请求被服务端接收,于是服务端需要一直等待客户端发送请求过来,这样就浪费了服务器的资源。