计算机网络(二)——网络协议基础、TCP/UDP

一、协议的概念

1、什么是协议:

从应用的角度出发,协议可以理解为“规则”,是数据传输和数据的解释的规则。

仅在A、B之间遵守的传输规则称为原始协议。当协议被更多人采用,不断的增加,完善,最终形成一个稳定的、完整的文件传输协议,被广泛应用于各种文件传输过程中,该协议就成为一个标准协议。

2、典型协议:

传输层:常见协议有TCP/UDP协议

应用层:常见的协议有HTTP协议、FTP协议

网络层:常见的协议有IP协议、ICMP协议、IGMP协议

网络接口层:常见协议有ARP协议、RARP协议

(1)TCP传输协议:一种面向连接的、可靠的、基于字节流的传输层通信协议。

(2)UDP用户数据报协议:是OSI参考模式中一种无连接的传输层协议,提供面向事务的简单的不可靠的信息传输服务、

(3)HTTP超文本传输协议:是互联网上应用最广泛的一种网络协议。

(4)FTP文件传输协议

(5)IP协议是因特网互联协议

(6)ICMP协议是Internet控制报文协议,它是TCP/IP协议族的一个子协议,,用于IP主机、路由器之间传递控制协议

(7)IGMP协议是Ineternet组管理协议,是因特网协议家族中的一个组播协议,该协议运行在主机和组播路由器之间。

(8)ARP协议是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。

(9)RARP协议是反向地址转换协议,通过MAC地址确定IP地址。

 

二、网络应用程序设计模式

1、C/S模式

传统的网络应用设计模式,客户机/服务器模式,需要在通讯两顿各自部署客户机和服务器来完成数据通信。

优点:

(1)可以将数据缓冲在客服端本地,提高运行效率。

(2)可以采用的协议较为灵活。

缺点:

(1)对用户的安全构成威胁

(2)需要进行客户端/服务器双端的开发,工作量理论成倍提升。

(3)程序开发过程中,联调比较困难。

2、B/S模式

浏览器/服务器模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据传输。

优点:7、

(1)工作开发量小。

(2)开发不受平台限制,可移植性强。

(3)用户安全性高。

缺点:

(1)必须与浏览器一样采用http协议进行通信,协议选择

(2)网络应用支持受限、缓冲数据不尽如人意

 

三、分层模型

1、OSI七层模型

(7)应用层

(6)表示层

(5)会话层

(4)传输层

(3)网络层

(2)数据链路层

(1)物理层

(1)物理层:主要定义物理设备标准,如网线的接类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是常说的数模转化和模数转化)这一层的数据叫做比特。

(2)数据链路层:定义了如何让数据已帧为单位进行传输,以及如何控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200,8,N,1。

(3)网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径的选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层就是管理这种连接的层。

(4)传输层:定义一些传输数据的协议和端口号(WWW端口号80等),如:TCP(传输控制协议,效率低,可靠性强,用户传输可靠性要求高,数据量小的数据),UDP(用户数据报协议,与TCP特性刚好相反,用于传输可靠性要求不高,数据量大的数据)。主要是将从下层接收的数据进行分段和传输,到达目的地后再进行重组。通常把这一层叫做段。

(5)会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接收会话请求(设备之间需要互相认识可以使IP也可以是MAC或者主机名)。

(6)表示层:确保一个系统的应用层所发送的信息可以另一个系统的应用层读取。例如:PC程序员与另一台计算机进行通信,其中一台计算机使用扩展——十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符,如有必要,表示层会使用一种通用格式来进行多种数据格式之间的转换。

(7)应用层:最靠近用户的OSI层,这一层为用户的应用程序(电子邮件,文件传输,终端仿真等,提供网络服务)。

2、TCP/IP四层模型

TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)、和链路层(link,网络接口层)四层。如下图所示:

计算机网络(二)——网络协议基础、TCP/UDP_第1张图片

两台计算机位于不同网络中,由一台计算机到另一台计算的数据传输过程:

计算机网络(二)——网络协议基础、TCP/UDP_第2张图片

链路层有以太网,令牌环网等标准,链路层负责网卡设备的驱动、帧同步(即从网线上检测什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备、可以在不同的链路层设备之间转发数据帧(比如十兆以太网和百兆以太网之间,以太网和令牌环之间),由于不同链路层的帧格式不同,交换机要将来的数据报拆掉链路层首部重新封装之后再转发。

网络层的IP协议是构成Internet 的基础,Internet上的IP主机通过IP地址来标识,Ineternet上有大量路由器负责数据IP地址来选择合适的路径来转发数据包数据报从Internet上的源主机到目的主句往往要经过数十个路由器。路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。

网络层负责点到点的传输(点指的时主机或者路由器),而传输层负责端到端的传输(端指的是源主机和目的主机)。传输层可选择TCP或者UDP协议。

目的主机收到数据包,经过歌城协议栈最终到达应用程序:

计算机网络(二)——网络协议基础、TCP/UDP_第3张图片

以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。假如是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。

ARP和RAPR属于链路层,IP属于网络层,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。

 

四、协议格式

1、数据包封装

传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示:

计算机网络(二)——网络协议基础、TCP/UDP_第4张图片

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment)在网络层叫做数据报(datagram)在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

2、以太网帧格式(链路层)

以太网的帧格式如下:

计算机网络(二)——网络协议基础、TCP/UDP_第5张图片

其中的源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。可在shell中使用ifconfig命令查看,“HWaddr 00:15:F2:14:9E:3F”部分就是硬件地址。协议字段有 三种值,分别对应IP、ARP、RARP。帧尾是CRC校验码。 

以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU,则需要对数据包进行分片(fragmentation)。ifconfig命令输出中也有“MTU:1500”。注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧头长度。

3、ARP数据报格式

在网络通讯时代,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符合,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。

每台主机都维护一个ARP缓冲表,可以用arp-a命令查看。缓冲表中的标项目有过期时间。

计算机网络(二)——网络协议基础、TCP/UDP_第6张图片

4、IP段格式

计算机网络(二)——网络协议基础、TCP/UDP_第7张图片

IP数据报的首部长度和数据长度都是可变长的,按总是4字节的整数倍。TTL(Time to live)是这样用的:源主机为数据包设定一个生存时间,比如64,每过一个路由器就把该值减1,如果减到0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)。协议字段指示上层协议是TCP、UDP、ICMP还是IGMP。然后是校验和,只校验IP首部,数据的校验由更高层协议负责。

5、UDP数据报格式

计算机网络(二)——网络协议基础、TCP/UDP_第8张图片

UDP首部:源端口号是客户端的端口号,目的端口号,是TFTP服务的端口号。

一般的网络都是像TFTP这样,通信的双方分别是客户端和服务器,客户端主动发起请求,而服务器被动地等待,接收和应答请求。客户端的IP地址和端口号唯一标识了该主机上的TFTP客户端进程,服务器的IP地址和端口号唯一标识了该主机的TFTP服务进程,由于客户端是主动发起请求的一方,他必须知道服务器的IP地址和TFTP服务进程的端口号,所以,一些常见的网络协议有默认的服务器端口,例如HTTP服务默认TCP协议的80端口,FTP服务默认TCP协议的21端口,TFTP服务默认UDP协议采用的69端口、在使用客户端程序时,必须指定服务器的主机名或IP地址,如果不明确端口号则采用默认端口。

很多服务由well-known的端口号,然而客户端程序的端口不必是well-kown的,往往是每次运行客户端程序时由系统自动分配一个空闲的端口号,用完就释放掉,称为ephemeral的端口号。因为客服端连接服务器时,必须明确知道服务器的IP和端口号,而客服端的IP和端口号在连接时就会被服务器获取。

6、TCP数据报格式

计算机网络(二)——网络协议基础、TCP/UDP_第9张图片

与UDP协议也有源端口号和目的端口号,通讯双方由IP地址和端口号标识。32位序号,32位确认序号,窗口大小稍后详细解释。4位首部长度和IP协议头类似,表示TCP协议头的长度以4字节为单位。因此TCP协议头最长可以是4*15 = 60字节。

 

五、NET映射和打洞机制

1、NET映射

交换机中有NET映射表:将连接到当前路由器终端的局域网IP和公网IP的对应。

使用NAT协议,局域网内的计算机可以访问Internet上的计算机,但Internet上的计算机无法访问局域网内的计算机。

2、打洞机制

假设两个扣扣A、B,他们通信需要通过腾讯的服务器。当A发送消息时,需要通过腾讯服务器进行一次转发到B。但像视频通过这种对实时性要求比较高的通信,使用这种方式无法保障通信的实时性,如果让他们直接通信,实时性就会高很多。但路由器有一个保护机制(对于陌生的IP第一次发过来的数据包,会进行屏蔽或丢弃,主要为防止网络的恶意攻击)。A想与B进行通信,所携带数据包的IP必须相互熟悉,这就需要在两个路由器之间打一个洞,由服务器进行这个操作。

实现过程:在登入QQ的时候,就会访问腾讯服务器,而腾讯服务器也返回一个数据包,这个数据包会携带腾讯服务器的公网IP,相对于来说公园IP在A、B那里都是熟悉的IP(就是为了防止陌生IP屏蔽),而服务器借助公网IP帮助A、B完成打洞(打洞就是实现一种通路),当它把这个洞打好以后A、B就可以实时通信。打洞是由服务器来完成的,最终的目的就是为了提高数据的传输速率。

UDP打洞:所谓UDP打洞就是客户端A通过UDP协议向服务器发送数据包,服务器收到以后,获取数据包,并且可获取客户端A地址和端口号。同样在客户端B发送给服务器UDP数据包后,服务器同样在收到B发送过来的数据包以后获取B的地址和端口号,将A和B的地址与端口号分别发送给对方,这样双方就可以继续用UDP协议通信。对于一些应用或者需求,需要两个客户端临时做一些通信,可以通过不建立TCP就完成。

 

你可能感兴趣的:(计算机网络)