网络编程(一):网络基础之一

今天开始学习网络编程,当然还是要从网路基础学起,首先我们来熟悉一下TCP/IP模型与OSI模型之间的对应关系
网络编程(一):网络基础之一_第1张图片
网络编程(一):网络基础之一_第2张图片

一.TCP/IP四层模型
TCP/IP是⼀一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇 分为四层,IP位于协议簇的第⼆二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI 的第四层)。
TCP/IP通讯协议采⽤用了4层的层级结构,每⼀一层都呼叫它的下⼀一层所提供的⽹网络来完成⾃自⼰己 的需求。
这4层分别为:
应用层:应⽤用程序间沟通的层,如简单电⼦邮件传输(SMTP)、⽂文件传输协议(FTP)、 ⽹网络远程访问协议(Telnet)等。
传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、⽤用户数据 报协议(UDP)等,TCP和UDP给数据包加⼊入传输数据并把它传输到下⼀一层中,这⼀一层负 责传送数据,并且确定数据已被送达并接收。
互连⽹网络层:负责提供基本的数据封包传送功能,让每⼀一块数据包都能够到达⽬目的主机(但 不检查是否被正确接收),如⽹网际协议(IP)。
网络接口层:对实际的⽹网络媒体的管理,定义如何使⽤用实际⽹
网络(如Ethernet、Serial Line 等)来传送数据。

二.OSI七层模
OSI(Open System Interconnection,开放系统互连)七层⽹网络模型称为开放式系统互联参考 模型 ,是一个逻辑上的定义,一个规范,它把⽹网络从逻辑上分为了7层。每一层都有相关、 相对应的物理设备,比如路由器,交换机。OSI 七层模型是⼀一种框架性的设计方法 ,建立 七层模型的主要目的是为解决异种⽹网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类型的主机实现数据传输。它的最大优点是将服务、接口和协议这三个概念明 确地区分开来,通过七个层次化的结构模型使不同的系统不同的⽹网络之间实现可靠的通讯。

三.TCP/IP协议栈和数据包封装
TCP/IP⽹网络协议栈分为应用层(Application)、传输层(Transport)、⽹络层(Network)和链路层 (Link)四层。
如下图所示:
网络编程(一):网络基础之一_第3张图片
假如有两台计算机需要通信,它们之间就会遵循TCP/IP协议,可能给一个明显的图大家就会更加明白通信的过程
网络编程(一):网络基础之一_第4张图片
传输层及其以下的机制由内核提供,应用层由用户进程提供(后⾯面将介绍如何使用socket API编写应⽤用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数
据从 一台计算机通过⼀定的路径发送到另一台计算机。应用层数据通过协议栈发到⽹网络上时,每层协议都要加上一个数据⾸首部(header),称为封装(Encapsulation)。
四.数据包的封装
上文提到了封装,接下来我们就要谈谈数据包在传输过程中的封装问题。
网络编程(一):网络基础之一_第5张图片
上图就是数据包在传输的过程中一层一层的封装过程,可以看出,每次向上传输一层,数据段就会“增长,是因为不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达⽬目的主机后每层 协议再剥掉相应的⾸首部,最后将应⽤用层数据交给应⽤用程序处理。

上图是在两台计算机在同一网段下面进行通信,假如两台计算机在不同的网段里,则要经过一个或多个路由器,如下图所示:
网络编程(一):网络基础之一_第6张图片
其实在链路层下面还有物理层,指的是电信号是如何传递的,而集线器(hub)就是工作在物理层的,作用主要是放大信号,使之传得更远。

链路层有以太⽹、令牌环⽹等标准,链路层负责⽹卡设备的驱动、帧同步(就是说从⽹线上检 测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等工作。

路由器是⼯工作在第三层的⽹网络设备,同时兼有交换机的功能,可 以在不同的链路 层接⼜⼝口之间转发数据包,因此路由器需要将进来的数据包拆掉⽹网络层和链路 层两层⾸首部并重新封装。IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠 性可以在上层协议或应⽤用程 序中提供⽀支持。

⽹络层负责点到点(point-to-point)的传输(这⾥里的“点”指主机或路由器),⽽传输层负责端到端 (end-to-end)的传输(这⾥里的“端”指源主机和⽬的主机)。传输层可选择TCP或UDP协议。TCP是一种⾯面向连接的、可靠的协议,有点像打电话,双⽅方拿起电话互通⾝身份之后就建⽴了连接,然后说话就⾏行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断
开 连接。也就是说TCP传输的双⽅需要⾸先建⽴立连接,之后由TCP协议保证数据收发的可靠 性,丢失的数据包⾃动重发,上层应⽤用程序收到的总是可靠的数据流,通讯之后关闭连接。 UDP协议不⾯面向 连接,也不保证可靠性,有点像寄信,写好信放到邮筒里,既不能保证信件在邮 递过程中不会丢失,也不能保证信件是按顺序寄到⽬的地的。使⽤UDP协议的应⽤程序需要⾃己完成丢包重发、消息排序等工作。

你可能感兴趣的:(网络,网络编程,tcp,通讯)