常用的各种网络协议概念关系整理
来源:互联网 发布:朝鲜留学生在中国 知乎 编辑:程序博客网 时间:2024/06/06 00:41
本文理清网络开发相关知识。包括各种协议之间的关系。
0x01 TCP/IP协议
TCP/IP协议是一个协议簇。里面包括很多协议的。包括UDP,TCP,IP协议。
TCP/IP协议集包括应用层,传输层,网络层,网络访问层。
应用层
- 超文本传输协议(HTTP):万维网的基本协议.
- 文件传输(TFTP简单文件传输协议):
- 远程登录(Telnet),提供远程访问其它主机功能,它允许用户登录 internet主机,并在这台主机上执行命令.
- 网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法,以及配置管理,统计信息收集,性能管理及安全管理等.
- 域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址.
运输层
- TCP 传输控制协议
- UDP 用户数据报协议
网络层
处理分组在网络中的活动,如分组的选路;网络层的协议包括
- IP协议
- ICMP协议(Internet互联网控制报文协议)
- IGMP协议(Internet组管理协议)
链路层
也称数据链路层或网络接口层,包括设备驱动程序和网络接口卡,它们一起处理与电缆的物理接口细节。链路层主要有三个目的
- 为IP模块发送和接受IP数据
- 为ARP模块发送ARP请求和接受ARP应答
- 外RARP发送RARP请求和接受RARP应答
0x02 IP协议
IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制–这被认为是上层协议–TCP或UDP要做的事情。
下图是IP头部结构,20个字节
0x03 TCP协议
TCP(Transmission Control Protocol,传输控制协议)
是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。
TCP三次握手过程
- 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信 和 你可以用此序列号作为起始数据段来回应我.
- 主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了 和 你要用此序列号作为起始数据段来回应我
- 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:我已收到回复,我现在要开始传输实际数据了
TCP断开连接四次握手
- 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
- 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
- 由B 端再提出反方向的关闭请求,将FIN置1
- 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础.
TCP头部结构
0x04 UDP协议
UDP(User Data Protocol,用户数据报协议)
UDP是一个简单的面向数据报的传输层协议。
UDP头部结构
0x05 TCP与UDP的区别
- TCP基于连接,UDP无连接
- TCP需要较多系统资源,UDP需要较少系统资源
- TCP程序结构较复杂,UDP程序结构简单
- TCP流模式,UDP数据报模式
- TCP保证数据正确性,UDP更容易丢包
- TCP保证数据顺序,UDP不保证数据顺序
0x06 游戏中的长短连接
短连接
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指 Socket 连接后发送后接收完数据后马上断开连接。
长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立 Socket 连接后不管是否使用都保持连接,但安全性较差。
0x07 Socket
socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),
通过Socket,我们才能使用TCP/IP协议。
实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。
所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,
从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等
socket的抽象层位于应用层和运输层之间。
TCP编程的服务器端一般步骤:
1. 创建一个socket,用函数socket();
2. 设置socket属性,用函数setsockopt(); * 可选
3. 绑定IP地址、端口等信息到socket上,用函数bind();
4. 开启监听,用函数listen();
5. 接收客户端上来的连接,用函数accept();
6. 收发数据,用函数send()和recv(),或者read()和write();
7. 关闭网络连接;
8. 关闭监听;
TCP编程的客户端一般步骤:
1. 创建一个socket,用函数socket();
2. 设置socket属性,用函数setsockopt();* 可选
3. 绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4. 设置要连接的对方的IP地址和端口等属性;
5. 连接服务器,用函数connect();
6. 收发数据,用函数send()和recv(),或者read()和write();
7. 关闭网络连接;
UDP编程的服务器端一般步骤:
1. 创建一个socket,用函数socket();
2. 设置socket属性,用函数setsockopt();* 可选
3. 绑定IP地址、端口等信息到socket上,用函数bind();
4. 循环接收数据,用函数recvfrom();
5. 关闭网络连接;
UDP编程的客户端一般步骤:
1. 创建一个socket,用函数socket();
2. 设置socket属性,用函数setsockopt();* 可选
3. 绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4. 设置对方的IP地址和端口等属性;
5. 发送数据,用函数sendto();
6. 关闭网络连接;
0x08 Http协议
HTTP协议即超文本传送协议(HypertextTransfer Protocol)是一个基于请求与响应模式的、无状态的、应用层的协议,通常基于TCP协议之上。
HTTP请求
由三部分组成:请求行、消息报头、请求正文
请求行格式 Method Request-URI HTTP-Version CRLF
- Method表示请求方法
- Request-URI是一个统一资源标识符
- HTTP-Version表示请求的HTTP协议版本
- CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
HTTP响应也由三个部分组成:
状态行、消息报头、响应正文
状态行格式 HTTP-Version Status-Code Reason-Phrase CRLF
- HTTP-Version表示服务器HTTP协议的版本;
- Status-Code表示服务器发回的响应状态代码;
- Reason-Phrase表示状态代码的文本描述。
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值
1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收、理解、接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求无法实现5xx:服务器端错误--服务器未能实现合法的请求
HTTP消息报头(之后文章详解,此处不做说明)
- 常用的各种网络协议概念关系整理
- 各种网络常用协议
- 【计算机网络】协议-各种网络协议之间的关系
- 网络协议的概念
- 网络的各种协议类型
- 各种网络相关的协议
- 常用网络术语 && HTTP协议的几个重要概念 && HTTPS传输协议
- 常用的网络协议
- 常用的网络协议
- 常用的网络协议
- 常用的网络协议
- hadoop 各种概念整理
- [Android--USB]USB协议各个版本的关系_网络整理
- Https的各种协议-集合整理
- 1.4各种协议与HTTP协议的关系
- 常用的网络协议端口
- 常用的网络协议汇总
- 常用的网络传输协议
- SIGIR 2017 Paper Characterizing and Predicting Enterprise Email Reply Behavior
- git
- 2017年8月28日22:46:43
- Expect ssh免秘钥登入自动脚本(ssh-copy-id、expect免交互输入脚本)
- 01_SpringMVC流程架构图
- 常用的各种网络协议概念关系整理
- 链表基本操作的函数实现。(1)
- Rancher部署Træfik实现微服务的快速发现
- Linux软件自动化部署脚本
- Java常见异常总结
- getopt_long 函数详解
- 古文觀止卷八_送李愿歸盤谷序_韓愈
- sublime配置latex记录
- 网站架构学习(一)之架构演化