网络协议

网络编程

1. 网络分层模型

OSI七层模型TPC/IP四层模型
应用层应用层
表示层应用层
会话层应用层
传输层传输层
网络层网络层
数据链路层链路层
物理层链路层

2. 各层与协议关系

应用层

http ftp nfs 自定义

传输层

TCP UPD (端口号)

网络层

IP(主要) (主机)

链路层

ARP (mac地址)

2.1 链路层ARP协议

ARP协议作用:

借助IP获取mac地址

过程:

在一个局域网内,
A主机广播发送ARP请求包:

源mac地址 | 目的mac地址(未知) | 源IP地址 | 目的IP地址

B主机收到后,发现是自己的IP,进行应答。

源mac地址 | 目的mac地址(从请求包中获取) | 源IP地址 | 目的IP地址(从请求包中获取)

2.2 网络层

IP
IP协议的作用:

在网络环境中唯一标识一台主机

2.3 传输层

TCP/UPD

port——在一台主机上唯一标识一个进程

2.4 应用层

ftp/http/自定义

对数据进行封装,解封装

2.5 数据通信过程

封装

应用层——传输层——网络层——链路层

解封装

链路层——网络层——传输层——应用层

2.6 总结通信过程

  1. mac地址 (不需要用户指定) (ARP协议)IP——mac
  2. IP地址 (需要用户指定) —— 确定主机
  3. port端口号 (需要用户指定) —— 确定程序

3. socket 套接字

channel通信方式:

双向半双工

从左到右/从右到左,一边读一边写 (对讲机)

双向全双工

任意一边都可以同时读写 (电话) —— 实际上封装了两个通道,对外一个接口

单工通信

遥控器

4. TCP-CS

CS: 客户端/服务端

过程:

1. TCP服务器端listen(),指定IP+port,这里并不是监听链接。而是创建一个TCP/UPD的链接
2. 服务器端Accept(),阻塞监听客户端连接 ---> socket 通信
3. 客户端Dial(), ---> socket通信

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hVKOIFXS-1614969211975)(https://www.guangqian.club/myblog/Public/Admin/Js/editor/attached/image/20201127/20201127203026_56328.png)]

5. TCP通信过程

三次握手

第一次:客户端主动发起连接请求,SYN 2000(0), SYN表示标志位, 2000为自定义, 0表示内容大小
第二次:服务端被动接收请求, ACK 2001 SYN 7000(0), ACK表示应答标志位,在SYN的基础上+1,意思是2000之前的数据都可以接收到。发送ACK同时发送服务端的SYN标志位,表示服务端同意和客户端进行连接。
第三次:客户端向服务端发送响应,ACK 7001,意思是客户端可以接受服务端7000之前的所有数据。到此,三次握手完成——连接建立完成

四次挥手

第一次:主动关闭连接请求端:FIN 2000(0), 表示客户端发起关闭请求
第二次:被动关闭连接请求端:FIN 2001, 表示服务端确认接收到客户端关闭连接消息。至此,主动关闭端处于"半关闭"状态; 即客户端不再进行数据发送,只接收数据。
第三次:等待服务端数据发送完成,向客户端发送:FIN 5000(0), 表示服务端可以进行关闭。
第四次:最后客户端发送ACK 5001, 表示客户端确认服务端关闭。至此, 四次挥手完成。

为什么握手是三次,挥手是四次?

因为挥手时有 半关闭 状态,一次请求对应一次确认。 挥手时,客户端虽然发出关闭消息,但服务端可能存在数据还没发送完成,所以不能立刻发送FIN标志位。

建立连接时,被动方服务器端结束CLOSED阶段进入“握手”阶段并不需要任何准备,可以直接返回SYN和ACK报文,开始建立连接。
释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。

连接
https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页