常用的各种网络协议概念关系整理
2017-08-28 22:47
302 查看
本文理清网络开发相关知识。包括各种协议之间的关系。
TCP/IP协议集包括应用层,传输层,网络层,网络访问层。
![](https://img-blog.csdn.net/20170828224620209?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlraW5nc2MyMDA3XzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
文件传输(TFTP简单文件传输协议):
远程登录(Telnet),提供远程访问其它主机功能,它允许用户登录 internet主机,并在这台主机上执行命令.
网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法,以及配置管理,统计信息收集,性能管理及安全管理等.
域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址.
UDP 用户数据报协议
IP协议
ICMP协议(Internet互联网控制报文协议)
IGMP协议(Internet组管理协议)
为IP模块发送和接受IP数据
为ARP模块发送ARP请求和接受ARP应答
外RARP发送RARP请求和接受RARP应答
下图是IP头部结构,20个字节
![](https://img-blog.csdn.net/20170828224637587?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlraW5nc2MyMDA3XzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。
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头部结构
![](https://img-blog.csdn.net/20170828224651730?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlraW5nc2MyMDA3XzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
UDP是一个简单的面向数据报的传输层协议。
UDP头部结构
![](https://img-blog.csdn.net/20170828224702949?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlraW5nc2MyMDA3XzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
TCP需要较多系统资源,UDP需要较少系统资源
TCP程序结构较复杂,UDP程序结构简单
TCP流模式,UDP数据报模式
TCP保证数据正确性,UDP更容易丢包
TCP保证数据顺序,UDP不保证数据顺序
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指 Socket 连接后发送后接收完数据后马上断开连接。
长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立 Socket 连接后不管是否使用都保持连接,但安全性较差。
通过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. 关闭网络连接;
请求行格式
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-Version表示服务器HTTP协议的版本;
Status-Code表示服务器发回的响应状态代码;
Reason-Phrase表示状态代码的文本描述。
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值
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消息报头(之后文章详解,此处不做说明)
相关文章推荐
- 常用网络协议及相互关系
- [Android--USB]USB协议各个版本的关系_网络整理
- 网络(1): IP,TCP,UDP相关概念综述及关系整理
- 【计算机网络】协议-各种网络协议之间的关系
- 常用网络术语 && HTTP协议的几个重要概念 && HTTPS传输协议
- 各种网络常用协议
- 关于socket与网络协议的整理
- 【转】各种开源协议及其关系
- 深入网络协议来理解数据传输一(转载整理)
- 【网络原理】整理 TCP/IP和OSI 模型各层协议及端口号
- android 各种常用,不易记的dialog,等控件整理
- HIVE与mysql的关系 hive常用命令整理 hive与hdfs整合过程
- 网络架构模型及相关协议整理分类
- 网络中常用协议端口号
- 网络常用端口与协议
- 互联网常用网络协议(不断更新,完善)
- 常用经典SQL语句大全完整版--详解+实例 《来自网络,很全没整理,寄存与此》
- 简单对各种网络协议的认识
- UNIX文件系统中各种文件、概念和函数之间的关系
- 50行Python代码输出各种网络协议报文结构的纯文本表格图