网络通讯模型

OSI网络模型

    说到网络编程总会从这里谈起,所以今天来把这个东西一次性理一理。OSI网络模型一共七层,按从底层开始依次是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。这个顺序是从底层到高层,怎么算底层?和物理介质接触的算底层,所以其实这七层可以化成一个金字塔形状。那为什么会有这种模型呢,早期在互联网诞生之际,各个厂家和企业都有定义自己的网络结构和协议,但是这样的结果就是没有一个统一的标准,不利于网络的全面普及,也就是一群局域网,但是却没有公网,为了能够建立统一标准的网络环境,OSI网络模型应运而生。这七层结构都做了些什么事呢?

  • 物理层:负责直接和硬件接触,这一层来决定一串二进制数据如何从网线的一段传输到另一端,比如决定传输的速率,决定网线接口的类型,光纤的类型。
  • 数据链路层:在物理层之上来定义数据通过什么格式传递,如何控制物理介质的访问(其实这个没怎么理解,如有大佬知道,望不吝赐教),还有定义数据的正确性校验之类的,比如奇偶校验这种。
  • 网络层:物理层和数据链路层都是点到点通讯,而网络层定义了如何让一群节点互相通讯,我们很熟悉的IP协议就是网络层协议,让网络中每个节点通过IP来定位,从而进行有效通讯。
  • 传输层:网络层实现了网络中多个节点的通讯,但是往往一台机器存在多个应用,需要和多个节点通讯,所以传输层通过定义一些协议和端口实现一个节点的多个通讯,我们熟知的TCP/UDP协议就是传输层协议。
  • 会话层:在传输层中A节点的A1端口能够找到B节点的B1端口,而会话层则是来控制两者之间的通讯,比如如何发起一个请求,或者接受一个请求,或者合适结束一次交互,由会话层来定义。
  • 表示层:在会话层的基础上定义传输的内容,比如传输的内容是字符串,还是ASSIC码,还是JPG图片。
  • 应用层:应用层是就是涉及到具体的应用了,比如是用于文件传输的(ftp,sftp)还是用于邮件的(smtp)或者是web接口的(http)。
  • 七层协议中物理,链路,网络属于低三层协议。会话,表示,应用属于高三层协议,有时候高三层会被统一叫做应用层,这样七层协议就变成了五层协议了。
        至于为什么会被分层这么多层,主要抽象出来,方便理清层次。

OSI网络七层模型的示意图如下:
在这里插入图片描述

TCP的握手和挥手

三次握手

在这里插入图片描述
在这里插入图片描述
    如上两幅图,第一幅就是我们日常生活中异地通讯时确认当前通话有效的实际操作,是不是觉得似曾相识。而第二幅其实就是TCP协议中模拟我们现实生活中的行为所产生的三次握手机制,是不是三次握手一下子就一目了然了,几个名词解释一下:SYN表示同步,发起标志为1,比如当前请求是你发起的,那你就要有SYN=1,而SEQ则是当前请求的序列号,x表示是一个变量,不确定的,而ACK则是应答标志为1,对应的有一个变量ack表示应答值,他是SEQ+1的结果,其实就是我们的:你听得到嘛?我听得到的一种数学表达形式,而第三个握手的时候,我们发现没有了SYN,也就表示这次握手是没有发起,只是对第二次握手的应答。

四次挥手

在这里插入图片描述
在这里插入图片描述

    如上两幅图即为四次挥手人为演示和数学逻辑演示,可以关注一下第二次和第三次挥手:“等等我还有几句话要说”,“好了我说完了,晚安”。似乎有点膈应,正常模式不应该是,我要睡了,好的晚安嘛?但是不能排除另一方说还有话没说完的情况。所以我一开始总是好奇为什么是四次挥手而不是三次挥手,就是把第二三次整合到一起(不知道你们有没有这么想过,哈哈哈)。还有一点就是为什么第四次的seq是第一次的seq+1,而第三次的seq却不是第二次的seq+1,原因是第一次挥手之后,A就没话要说了,所以第四次挥手仅仅是上一次序列号+1,而第二次和第三次挥手之间,B还有很多话要给A说,所以第三次挥手的序列也就不等于第二次的+1了。

SocketTimeoutException和connectTimeoutException的区别

    我们涉及到通讯时,总会配置两个超时时间,以及两个超时异常,即socketTimeout和connectTimeout。ConnectException 表示服务器请求超时;SocketTimeoutException表示服务器响应的超时,而请求超时就表示在进行TCP三次握手时就超时了,所以请求超时是可以直接重试的,因为服务端根本没有收到实际的数据,而socketTimeout则是握手成功之后的超时,所以结果是未知的,可能服务端收到了数据处理了,也可能服务端没有收到数据。

发布了39 篇原创文章 · 获赞 9 · 访问量 1022

猜你喜欢

转载自blog.csdn.net/qq_30095631/article/details/103457577