网络协议基础理论

1、互联网通信基本原理

一台硬件设备有了操作系统,装上应用软件就可以正常使用了,但仅限于处理当前设备上的数据,想让多个这样孤立的设备间可以互相传递数据,就需要底层的物理连接介质,这些底层连接就是为设备间铺好通信道路。有了通信道路后,信息具体要如何传递就需要用到通信协议。协议就是约定好的规则,规则约定了设备间怎么样建立连接、怎么样互相识别等,设备间想要正确的传递、获取和处理信息就需要遵守统一的规则。通信协议有很多种,发送方发送数据时选择哪种协议,接收方就需要使用哪种协议获取和解析数据。某些协议会依赖于其他协议,所以真正实现信息传输时,可能遵循的是一系列协议

可以和实际生活类比下,比如A要发送货物给B,首先要有从A到B的道路(相当于互联网的通信道路),然后A选择某种发送方式(相当于选择互联网的某种通信协议),然后按照所选择发送方式的规则打包货物(相当于按通信协议的规则打包数据),根据打包时填写的姓名地址等信息发送货物(相当于根据打包数据时增加的设备地址等信息发送数据),B收到包裹后按A所选择发送方式的规则拆开包裹以保证获得完好的货物(相当于收到信息后按发送时选择的通信协议进行拆包以获得完好的数据)。

2、互联网协议分类与作用

为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络国际标准化组织ISO)在1978年提出了开放系统互联参考模型,即著名的OSI/RM模型Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,每一层至少制定两项标准:服务定义和协议规范,前者给出了该层所提供的服务的准确定义,后者详细描述了该协议的动作和各种有关规程,以保证服务的提供。由于ISO指定的OSI参考模型过于庞大和复杂,在实现的时候造成了很大困难,在实际中,TCP/IP协议栈获得了更加广泛的应用。主流的操作系统基本上都采用TCP/IP(四层或五层)协议栈

每层常见物理设备

协议自上而下每层都依赖于下一层,根据实际情况需要选择不同层级的协议来实现通信,大部分用户感知到的只是最上面一层应用层

1)物理层:孤立的设备之间要想一起玩,就必须接入internet,言外之意就是设备之间必须完成组网,为它的上一层提供一个物理连接。物理层功能主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。

2)数据链路层:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思。数据链路层的功能是定义了电信号的分组方式,实现物理寻址,同时将原始比特流转变为逻辑传输线路、数据的成帧、流量控制、数据的检错、重发等。早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议Ethernet。Ethernet规定一组电信号构成一个数据包,叫做‘帧’,每一数据帧分成:报头head(固定18个字节,发送者/源地址6个字节,接收者/目标地址6个字节,数据类型6个字节)和数据data(最短46字节,最长1500字节)两部分,超过head+data最大长度限制就分片发送。head中包含的发送端和接收端地址来源于硬件设备的网卡地址即mac地址(每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示,前六位是厂商编号,后六位是流水线号),所以想接入internet的设备都必须具备网卡。有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过ARP协议获取另外一台主机的mac地址),Ethernet采用最原始的方式,广播(同一网络内的设备都会收到信息,打开后发现目标mac不是自己就丢弃,是自己就响应)的方式进行通信。

3)网络层:世界大网络是由一个个彼此隔离的局域网组成,以太网的广播方式只适用于局域网内,跨局域网只能通过路由转发。mac地址无法区分是否为同一个局域网,所以引入一套新的地址来区分不同的局域网/子网,这套地址即网络地址,因规定网络地址的协议叫IP协议,它定义的地址称之为IP地址。广泛采用的是v4版本协议即IPv4,它规定网络地址由32位2进制表示,范围0.0.0.0-255.255.255.255,一个ip地址通常写成四段十进制数,例:172.16.10.1。IP地址分为两部分:网络部分(标识子网)、主机部分(标识主机)

注意:单纯的IP地址段只是标识了IP地址的种类,从网络部分或主机部分都无法辨识一个IP所处的子网,例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网。所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。全0和全1的都保留不用。
A类:第一个字节为网络号,后三个字节为主机号,一般用于大型网络,保留了10.0.0.0~10.255.255.255作为私有地址。
B类:前两个字节为网络号,后两个字节为主机号。一般用于中等规模网络,保留了172.16.0.0~172.31.255.255作为私有地址。
C类:前三个字节为网络号,最后一个字节为主机号,一般用于小型网络,保留了192.168.0.0~192.168.255.255作为私有地址。
D类:是多播地址,一般用于多路广播用户。
E类:是保留地址。
回送地址:127.0.0.1。 也是本机地址,等效于localhost或本机IP。一般用于测试使用。例如:ping 127.0.0.1来测试本机TCP/IP是否正常。

总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

IP数据包也分为head(包含IP地址)和data两部分,无须为IP包定义单独的栏位,直接放入以太网数据帧的data部分。head长度为20~60字节,data最长为65,515字节,而以太网数据帧的data部分最长只有1500字节,因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据帧,分开发送了。

4)传输层:网络层的IP帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,主机上可能同时开启了多个应用程序,那么如何判断数据是给哪个应用程序,答案就是端口(端口范围0-65535,0-1023为系统占用端口),端口即应用程序与网卡关联的编号,应用程序通过监听端口来获取数据。传输层功能就是建立端口到端口的通信,包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对 的数据包的重新排序功能。示例:TCP,UDP,SPX。

TCP或UDP数据包也分为head(包含端口信息)和data两部分,无须为TCP或UDP包定义单独的栏位,直接放入IP数据包的data部分。TCP为可靠传输协议,TCP数据包没有长度限制(head长度为20字节),理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。UDP为不可靠传输协议,head部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

TCP协议的三次握手和四次挥手

5)会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。

6)表示层:这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASII格式传输。如果选择二进制,那么发送方和接收方不 改变文件的内容。如果选择ASII格式,发送方将把文本从发送方的字符集转换成标准的ASII后发送数据。在接收方将标准的ASII转换成接收方计算机的 字符集。示例:加密,ASII等。

7)应用层:前面几层定位到了应用程序,为了保证应用程序的正常工作,必须规定好传给应用程序的数据的组织形式,但应用程序多种多样,也就出现了多种多样的应用层协议(应用协议也分为head和data两部分,整体放入上层协议的data部分),应用层功能就是规定应用程序的数据格式。比如:应用程序有多个注册用户,数据是传给应用程序的某个用户,那么数据传给应用程序后,怎么保证指定用户才能够查看,那就要在发送数据时在应用协议的head中添加用户信息。示例:telnet,HTTP,FTP,WWW,NFS,SMTP等。

3、互联网通信的技术实现

当我们在操作系统中安装一个应用程序但没有启动运行时,是无法与该应用程序进行通信的,应用程序操作启动运行时,操作系统会为其创建对应的进程(并为进程分配唯一的标识符)。进程是程序的执行实体(同一程序可以对应多个进程),是系统进行资源分配和调度的基本单位。端口号+IP地址就可以组成一个socket套接字,进程就可以利用socket进行通信了。socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用。

4、互联网通信流程示例

想实现网络通信,每台主机需具备四要素:本机的IP地址、子网掩码、网关的IP地址、DNS的IP地址。获取这四要素分两种方式:1.静态获取(即手动配置)、2.动态获取(通过dhcp获取)。

1.本机获取

  • 本机的IP地址:192.168.1.100
  • 子网掩码:255.255.255.0
  • 网关的IP地址:192.168.1.1(网关的IP地址是具有路由功能的设备的IP地址)
  • DNS的IP地址:8.8.8.8

2.打开浏览器,想要访问Google,在地址栏输入了网址:www.google.com。

3.dns协议(基于udp协议),将域名解析为IP地址

4.HTTP部分的内容,类似于下面这样:

GET / HTTP/1.1
Host: www.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: … …

我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中。

5 TCP协议

TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

6 IP协议

然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。

IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。

7 以太网协议

最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。

8 服务器端响应

经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值