一、网络分层模型
1.1 OSI参考模型简介
为了解决网络之间兼容性的问题,帮助各个厂商生产出可兼容的网络设备,国际标准化组织ISO于1984 年提出了开放系统互连参考模型,简称OSI参考模型,它很快成为计算机网络通信的基础模型。
OSI参考模型从上到下依次为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
应用层:负责为操作系统或网络应用程序提供访问网络服务的接口。应用层提供的服务包括文件传输、文件管理以及电子邮件的信息处理。浏览器或者说WWW(万维网)也属于应用层;常见的协议有FTP、TFTP、HTTP、DHCP、Telnet、DNS、SSH等。
表示层:应用程序和网络之间的翻译官,负责对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的解密和加密、压缩、格式转换等;常见的协议有JPEG、ASCII、GIF、DES、MPEG。
会话层:管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。主要功能是建立通信链接,保持会话过程通信链接的畅通,利用在数据中插入校验点来同步两个节点之间的对话,决定通信是否被中断以及通信中断时决定从何处重新发送;常见的协议有RPC、SQL、NFS。
传输层:其主要功能是负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。传输层还要处理端到端的差错控制和流量控制问题;传输层协议的代表包括:TCP、UDP、RTP、SCTP、SPX 等。
网络层:其主要功能是将网络地址(例如,IP地址)翻译成对应的物理地址(例如,网卡地址),并决定如何将数据从发送方路由到接收方;常见的协议有IP、ICMP、IGMP、IPX、BGP、RIP等。
数据链路层:它控制网络层与物理层之间的通信。它的主要功能是将从网络层接收到的数据分割成特定的可被物理层传输的帧;该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
物理层:该层包括物理连网媒介,为上层协议提供了一个传输数据的物理媒体;在物理层的互联设备包括:集线器、中继器、网线、调制解调器、网卡。
1.2 TCP/IP四层模型
TCP/IP 模型是事实上的标准模型,在7层模型的基础上将最上面三层的应用层、表示层、会话层统一为应用层,将数据链路层和物理层统一为链路层或者叫网络接口层。
二、数据加工和传输过程
TCP/IP 模型每个层都有各自的功能和分工,当有用户数据想要发送给另一台设备的时候,数据自上而下,从应用层向链路层传递有一个复杂的过程。
数据从应用层进入,到达传输层,添加上TCP首部,将数据加工成TCP段,称为Segment。这是为了保证数据的可靠性。
接着数据到达网络层,在网络层使用IP协议,被添加上IP首部,将数据加工成 IP数据包,称为datagram。经过网络层IP协议的加工,指定目标地址和MAC地址,保证数据准确的发送到目标机器。
接着数据到达链路层,添加上以太网头部,将数据加工成以太网帧,称为frame,包含了网卡等硬件相关的数据。
三、TCP协议
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
3.1TCP协议格式
(1)源端口和目的端口各占2个字节(16bit),分别写入源端口号和目的端口号。
(2)序号占4字节。序号范围是【0—2的32次方-1】,序号增加到2的32次方-1后,下一个序号就回到0,也就是说,序号使用mod 2的32次方运算,TCP是面向字节流的。在一个TCP连接中传送的字节流中每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在建立连接时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。
(3)确认号占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为=N,则表明到序号N-1为止的所有数据都已正确收到
(4)数据偏移占4bit,它指出TCP报文段的起始数据处距离TCP报文段的起始处有多远。这个字段实际上指出TCP报文段的首部长度。
(5)保留占6bit,保留今后使用,目前置为1
(6)FLAG(控制位)字段标识含义(共6个)
紧急URG:当URG=1时,表明紧急指针字段有效。
确认ACK,仅当ACK=1时确认号字段才有效,ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段必须把ACK置1。
推送PSH:当两个应用用进程进行交互式的通信时,有时在另一端的应用进程希望在键入下一个命令后立即就能够收到对方的响应。在此情况下,TCP就可使用推送操作,这时,发送方将PSH置1,并立即创建一个报文段发送出去,接受方TCP把PSH=1的报文尽快的推送交付接收应用进程,而不用再等到整个缓存都填满了后再向上交付
复位RST:当RST=1时,表明TCP连接中出现了严重差错(主机宕机等其他原因),必须释放连接,然后再重新建立连接,RST置1还用来拒绝一个非法报文或拒绝打开一个连接。RST也可以成为重建位或重置位
同步SYN:在建立连接时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求,若对方同意建立连接,则应在响应的报文段中使用SYN=1和ACK=1,因此SYN=1表示这是一个连接请求或连接接收报文
终止FIN:用来释放一个连接,当FIN=1时,表明此报文段的发送方已经发送完毕,并要求释放运输连接
(7)窗口占2字节(16bit),窗口值为0-2的16次方-1之间的证书,窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据
例如:设确认号为701,窗口字段为1000,表明从701号开始算起,发送此报文段的乙方还需要接收1000个字节数据(字节序号为701-17000)的接收缓存空间
(8)校验和占2字节,校验和子弹检验的范围包括首部和数据两部分
(9)紧急指针占2字节,仅在URG=1时才有意义,他指出本报文段的紧急数据的字节数,因此,紧急指针指出了紧急数据的末尾在报文段中的位置,当所有紧急数据处理完后,TCP就该告诉应用程序恢复正常工作
(10)选项,长度可变,最长可达40字节,当没有使用选项时,TCP的首部长度为20字节
3.2 TCP的三次握手
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。
确认值(Acknowledgement)为1时是确认连接,用ACK表示。确认号(Acknowledgement Number)即上一次收到对端主机传送来的seq然后加1,再发送给对端知己,提示对端知己成功接收上一次所有数据,用ack表示。
第一次握手:
客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=X,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:
服务器端收到数据包后由标志位SYN=1,知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=X+1,随机产生一个序号值seq=Y,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:
客户端收到确认后,检查ack是否为X+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=Y+1,并将该数据包发送给服务器端,服务器端检查ack是否为Y+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
3.3 TCP的四次挥手
1、客户端把连接释放报文段首部的终止控制位FIN置1,其序列号seq=u,它等于前面已传送过的数据的最后一个字节的序列号加1。这时A进入FIN-WAIT-1(终止等待1)状态,等待服务器的确认。TCP规定,FIN的报文段即使不携带数据,也要消耗掉一个序号
2、服务器收到释放报文段后即发出确认,确认号是ack=u+1,而此报文段自己的序列号为v,B把已经传送过的数据的最后一个字节的序号加1.然后服务器进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从客户端到服务器这个方向的连接就释放了,这时TCP连接处于半关闭(half-close)状态,即A已经没有数据要发送了,但B若发送数据,客户端仍然要接收。也就是说,从服务器到客户端方向的连接并未关闭,这个状态还会持续一段时间;A收到来自服务器的确认后,进进入FIN-WAIT-2(终止等待2)状态,等待服务器发出的连接释放报文段
3、若服务器已经没有向客户端发送的数据,其应用进程就通知TCP释放连接。这时服务器发出的连接释放报文段必须使FIN=1。现在假定服务器序号是w(在关闭状态B可能又发送了一些数据)。服务器还必须重复上次已经发送的确认号ack=u+1。这是B进入LAST-ACK(最后确认)状态,等待客户端的确认
4、客户端在收到B的连接释放报文段后,必须对此发出确认。在确认报文段中把ACK置1.确认号ack=w+1,而自己的序号seq=u+1(根据TCP标准,前面发送过的FIN报文段需要消耗一个序号)。然后进入到TIME-WAIT(时间等待)状态,现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,客户端才进入到CLOSED状态。时间MSL叫做最长报文段寿命(Maximum Segment Lifetime),RFC793建议设置为2分钟,对于现在网络MSL=2分钟时间太长,因此,从A进入到TIME-WAIT状态后,要经过4分钟才能进入到CLOSED状态,才能建立下一个新的连接。
四、UDP协议
4.1协议简介
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、简单的传输层协议。与TCP不同,UDP不提供数据包的顺序保证或重传机制。
UDP的主要特性包括:
无连接的。即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
使用尽最大努力交付。即不保证可靠交付,因此主机不需要维护复杂的连接状态表(这里面有许多参数)。
面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不分拆,而是保留这些报文的边界。这就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文,如图所示。在接收方的 UDP,对IP层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP一次交付一个完整的报文。因此,应用程序必须选择合适大小的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片处理,这会降低 IP 层的效率。反之,若报文太短,UDP 把它交给IP层后,会使 IP 数据报的首部的相对长度太大,这也降低了 IP 层的效率。
没有拥塞控制。网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如:IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络出现拥塞时丢失一部分数据,但却不允许数据有太大的时延。UDP 协议正好适合这种要求。
UDP 支持一对一、一对多、多对一和多对多的交互通信。
UDP的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
【考点】基于UDP的常见协议,一般考选择题,常见DNS、SNMP、TFTP、NTP等。
4.2 UDP首部报文介绍
源端口号 :占16位。标识源主机的端口或进程,同TCP;
目的端口号 :占16位。标识要发送目的主机的哪个端口或进程;
首部长度 :占16位。标识UDP整个数据报的长度(包括首部和数据)。最小值为8(仅有首部);
检验和 :占16位。检测UDP用户数据报在传输中是否有错,有错就丢掉。检测方式同TCP一样,检验范围也是包括首部和数据。
4.3 TCP和UDP的比较
特性 | TCP | UDP |
连接性 |
面向连接 |
无连接 |
可靠性 | 可靠传输 | 不可靠传输 |
传输速度 | 较慢 |
快速 |
应用场景 | 文件传输、邮件传输 | 视频会议、在线游戏 |
五、软考真题
2024年5月网络工程师:
SNMP 协议中使用( )协议进行通信。
A.TCP
B.IP
C.ICMP
D.UDP
【解析】答案是D,送分题必须牢记。
TCP 协议与 UDP 协议工作在( )。
A. 传输层
B. 网络层
C.物理层
D. 数据链路层
【解析】答案是A,传输层两大协议TCP、UDP,送分题。
SYN 泛洪攻击主要利用的是TCP 协议的()过程。
A. 连接建立 B.连接释放
C.序列号校验 D.数据传输
【解析】答案是A。SYN FLood攻击是在三次握手连接建立时攻击的。
2022年11月网络规划设计师
下图为UDP报文的两个16比特,计算得到的Internet Checksum为()
A.11011101110111011
B.1100010001000100
C.1011101110111100
D.0100010001000011
【解析】答案是D。校验和计算是两个16比特相加,从右向左进行相加。二进制加法0+0=0,1+0=1,1+1=10进一位,如果最高位相加后产生进位,则最后结果加1(再最后一位加1)。最后按位取反码,1的反码是0,0的反码是1。