网络通信和IO(2):OSI网络七层模型介绍 / tcp/ip五层 /TCP三次握手四次分手 / 网络的一下跳机制 / TCP传输层协议 / UDP协议和TCP协议的区别 / HTTP和tcp的区别

OSI网络七层模型简介

网络七层模型就是一个参考模型,也就是说有这么个七层的定义,就像是项目中的dao、service、controller三层架构一样,每一层都有自己的工作要干,互联网协议就按照不同的作用分为osi七层或tcp/ip五层或tcp/ip四层。

应用层

第一层:应用层。定义了用于在网络中进行通信和传输数据的接口

第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等

第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断

传输层

第四层:传输层。管理着网络中的端到端的数据传输

网络层

第五层:网络层。定义网络设备间如何传输数据

链路层(网络接口层)

第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输

第七层:物理层。这一层主要就是传输这些二进制数

学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构学习即可,这样既简洁又能将概念阐述清楚。
在这里插入图片描述

网络通讯的流程了基本如下(五层):

应用层,数据(加http协议等)—》传输层(包上tcp或者udp协议)—》网络层(包上ip协议)—》数据链路层(包上以太网协议)—》物理层

下面就开始详细介绍这个几层,并按如上流程进行演示,最好开一台服务器或者虚拟机,跟着一起操作感受一下,相信你会对OSI这几层以及各种协议有一个全新的认识

应用层

比如浏览器、qq微信都是属于应用层,准确的说是应用层客户端,访问的服务器就是应用层服务端。我们在浏览器发送的请求会被加上http协议传输到传输层。还有xftp、sqlyong等等会加ssh协议。

这些协议就是所谓的应用层协议,用来约定两个程序传输的格式、怎么加密的等等。不同的场景选择不同的协议来工作。

其后的传输层、网络层、网络接口层我们并不需要关心,因为这是操作系统内核帮我们做好的事情了。就像我们使用浏览器一样,http协议浏览器帮我们加好了,只需要输入域名就可以。

用linux访问百度举个例子:

1.创建连接: 8就代表文件描述符,<>代表输入输出,然后指向了一个路径,但是操作系统内核会把这个路径转换成对百度的socket连接

exec 8<> /dev/tcp/www.baidu.com/80

创建socket之后,cd到/proc目录下
在这里插入图片描述
这个目录下是内核程序运行时我们能在文件系统看到的东西,可以看到目录中有很多数字的目录,可以把他们想象成线程号一样。

如下命令就是查看当前执行进程的进程号,相当于查看当前运行的线程了。

echo $$

在这里插入图片描述
可以看到当前的进程号就是5725,那么进入5725
在这里插入图片描述
可以看到一些目录,这个fd就是前面说的文件操作符了,再cd进去,ll查看
在这里插入图片描述
0代表标准输入,1代表标准输出,2代表报错,下面的8就是我们刚才创建的socket,指向的百度。

那么我们现在其实就是应用层客户端,我们已经有了应用服务端百度的连接,那么我现在应该遵循某种协议,给百度发一些信息,让百度把主页返回给我们。现在很明显我们应该遵循HTTP协议。

2.发送请求: 请求的HTTP协议规范为 “GET / HTTP/1.0\n”,最后\n就是换行符,-e代表识别换行符,>代表会写到文件中,>&就代表会写到文件描述符中。

echo -e "GET / HTTP/1.0\n" >& 8

通过执行上面命令,就会把“GET / HTTP/1.0\n”通过8号文件描述符发送给百度,我们8号文件描述符的这个socket连接是双向的,可输入输出,那么百度就会把主页的信息放到socket中,我们只需要把8文件描述符的数据输入重定向出来,就可以看到百度主页的信息了

cat <& 8

在这里插入图片描述
在这里插入图片描述
上面我们干的其实就是一个应用层做的事,传输层网络层我们是无感的,因为系统内核已经把TCP协议的事做了,后面我们继续深入研究系统内核怎么做的TCP协议。

我们想一下刚才就做了两步,通过exec建立连接,发请求。那么怎么从应用层到的传输层、网络层的呢,其实太明显了,传输就是socket做的嘛,所以exec创建socket时就是调用了内核的传输层才建立的socket。

传输层

传输层就是把一台计算机的数据传输到另一台,基于的协议可以是TCP或者UDP,TCP是面向连接并可靠的协议,那么什么叫面向连接还可靠的呢,他要通过三次握手,四次挥手来保证它的连接的可靠性,以及滑动窗口的概念,这个后面再说。

三次握手

什么是三次握手呢,其实就像下图一样,由客户端这边的传输层创建了一个sync数据包发给服务端,代表我想和你建立握手,服务端如果能收到这个包,一般服务端的传输层会给客户端回一个sync+ack确定包,最后客户端还得再给客户端回一个确认包,这样就通过三次握手建立了连接。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值