网络编程和并发:1.简述 OSI 七层协议

1. 概念

Open System Interconnection : 开放互联系统

2. 图示

注:图片来源:https://www.cnblogs.com/maybe2030/p/4781555.html#_label1,作者:Poll的笔记

3.粗浅理解

物理层:主要设备,中继器、集线器,传输单位是比特(比特流),保证比特数据远距离传输不会衰减,都能对数据进行再生和重定时。

数据链路层:主要设备,网卡,网桥,交换机,传输单位是帧,以太网协议为基础进行传输。帧就是对字节的封装,字节(byte)是由位(bit)组成的。

网络层:主要设备,路由器,传输单位是报文(包),以IP协议为基础进行传输,提供逻辑地址IP,选路,数据从源端到目的端的传输。

传输层:主要设备,网管,传输单位是数据段(段),以TCP/UDP协议为主,实现网络不同主机上用户进程之间的数据通信,可靠与不可靠的传输,传输层的错误检验,流量控制等。

会话层:传输单位是:数据,会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。如服务器验证用户登录便是会话层完成额。

表示层:传输单位是:数据,表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。

应用层:传输单位是:数据,为操作系统或网络应用程序提供访问网络服务的接口。确定进程之间的性质以满足用户需求以及提供网络与用户的应用。

3. 理解

(1) 为什么要分这么多层?

原因是为了解耦,每一层都只干自己负责的事情,每一层和每一层之间的接口固定就行。

应用层的软件浏览器,微信等应用程序,不用关心其他,只要能够调用内核就行,通过socket就能完成信息传输。

TCP协议的三次握手示意图

TCP协议的两个特点:1.面向连接 2. 可靠

面向连接:三次握手成功后连接。

第一次握手:A给B发送一个syn的数据包,通过A的网络层---》A的链路层---》A的物理层---》B的物理层---》B的链路层---》B的网路层---》B的传输控制层,这一次的作用是保证A能发出东西,就是A的发送功能正常。

第二次握手:B收到A发送的syn数据包之后,按照原路给A发送一个新的数据包(应答)。这一步的作用是保证B的接收功能正常。

第三次握手:A收到B的应答包以后,同样也给B发送一个应答包。这一步保证A的接收功能正常,也保证B的发送功能正常。

三次握手成功后,双方就开启资源(进程或者线程)准备通信。

此时通信的过程简化如下

A给B发送了数据包,B收到数据包后,将有用的资源,例如查询数据的结果给了应用层,关键是,同时也会给A发送一个应答包,表示你发送的数据我收到了。

思考,那么当A给B发送数据包的时候,怎么确定这个数据包就是准确的发送给了B,而不是其他的应用程序呢?

其实就是使用socket,套接字。套接字里面会保存(A(发送方的 IP和port),B(接收方的IP和port)),那么B接收到了以后,就知道了A的IP和port,发送应答包的时候就能准确无误的给了A,而不会给其他应用程序,那么问题来了,第一次握手的时候,A怎么得到B的IP和port呢?

两种可能:第一种,A无限广播,给每一个ip和每一个port的组合发送消息,谁回我了,我就知道了谁的ip和端口(这种貌似不大可能,浪费时间)

第二种:发送之前,你就知道对方的ip和端口,要不你就不能发消息。

具体怎么回事,还需要进一步看书或请教他人。#TODO

那么双发消息发送完成后,需要释放端口,因为计算机的端口是有限的,那么就要断开连接,怎么断开连接呢?

# TODO

原文地址:https://www.cnblogs.com/meloncodezhang/p/11270720.html