您的位置:首页 >聚焦 >

通信协议

2022-05-14 11:54:48    来源:程序员客栈

-Start:关注本公众号后,可直接联系后台获取排版美化的详细文档!

-Hints:本篇文章所编纂的资料均来自网络,特此感谢参与奉献的有关人员。

网络分层协议

传输层协议区别:

TCP:传输控制协议

a 数据传输前必须要建立连接,数据传输完,必须释放连接。b 传输的数据无差错,不丢失,不重复,且顺序和源数据一致。c 在传输的过程中,数据拆分为不同的段,也就是segment。d 效率低,因为是面向连接的协议,通信之前必须要建立连接。

TCP【打电话】

TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。面向字节流,传输慢

UDP【发短信】

UDP 是一种面向无连接的传输层协议,不会对自己提供的连接实施控制。适用于实时应用,例如:IP电话、视频会议、直播等。

Socket

Socket就像一个电话插座,负责连通两端的电话,进行点对点通信,让电话可以进行通信,端口就像插座上的孔,端口不能同时被其他进程占用。而我们建立连接就像把插头插在这个插座上,创建一个Socket实例开始监听后,这个电话插座就时刻监听着消息的传入,谁拨通我这个“IP地址和端口”,我就接通谁。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

本地进程间通信:

消息传递(管道、FIFO、消息队列)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)共享内存(匿名的和具名的)远程过程调用(Solaris门和Sun RPC)

本地可以通过进程PID来唯一标识一个进程

网络进程间通信

网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

socket中TCP的三次握手建立连接

1【客户端:我要连接】客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;

2 【服务端:收到请求,可以连接】服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;

3 【客户端:收到回复,你说可以连接】客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;

【服务端,知道对方知道,开始干活】服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

socket中TCP的四次握手释放连接

1【主动端:我要关闭连接】某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;

2【被动端,进行收尾:我知道你要关闭连接,你等我结束】另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;

3 【被动端:我结束了,你可以关闭】一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送一个FIN N;

4 【主动端:我关闭了】接收到这个FIN的源发送端TCP对它进行确认。

这样每个方向上都有一个FIN和ACK。

网络访问流程

应用层:

1.浏览器向DNS服务器发起DNS请求,进行域名解析,获得相应的IP地址

2.根据HTTP协议生成HTTP报文请求

在应用层将要发送的数据内容形成了应用层的报文data,发送到传输层

传输层:

3.TCP的三次握手

把处理的数据段发送到网络层

网络层:

4.IP寻址

5.ARP协议获取MAC地址

数据在网络层被打包,这样封装上了网络层的包头,包头内部含有源及目的的ip地址

数据链路层:

6.MAC寻址

7.服务器接受请求

8.服务端处理请求

9.服务端提供响应

10.四次挥手

11.浏览器解析和渲染页面,展示给用户

参考资料:

https://blog.csdn.net/zheng_guan/article/details/96427176

https://zhuanlan.zhihu.com/p/109826876

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

https://blog.csdn.net/ningmengshuxiawo/article/details/115413766

https://blog.csdn.net/weixin_48126962/article/details/117074843

https://blog.csdn.net/qq_42978418/article/details/108399390

关键词: 关闭连接 应用进程 服务器端

相关阅读