二十周
网络的五层划分是什么?TCP和UDP的区别是什么?简述TCP的三次握手过程。
五层划分是什么?
五层划分是将计算机网络体系机构分层为:应用层、运输层、网络层、数据链路层、物理层。
由于OSI的七层协议体系,复杂又不实用;而TCP/IP协议体系(又称协议族)每层处理内容复杂,不易理解。故综合上述两种提出了5层协议体系为新人讲解网络原理,实际应用中没有此体系。
应用层(application layer)
应用层任务是:通过应用进程间交互来完成特定网络应用。不同的网络应用有不同的应用层协议。如万维网的HTTP协议、支持电子邮件的SMTP协议。应用层交互的数据单元常称为“报文”。
运输层(transport layer)
运输层任务是:为两个主机中进程之间的通信提供通用的数据传输协议。所谓通用,是强调多种应用可以使用同一个运输层服务,因为日常中一台主机常有多个进程。运输层主要使用的协议是:TCP和UDP。
运输层有复用和分用的概念。
网络层(network layer)
网络层任务是:为分组交换网上的不同主机提供通信服务,服务具体是指,把运输层产生的报文段或用户数据报封装成“分组”或“包”进行传送;另一个功能是选择合适的路由,使运输层传下来的分组能够通过路由器找到目的主机。大名鼎鼎的IP协议就属于该范畴。
数据链路层(data link layer)
链路层任务是:将网络层交下来的IP数据报组装成帧(framing),传送到链路的下个节点。
物理层(physical layer)
物理层任务是:发送方发送的比特,接收方如何无误接受。用多大的电压代表比特。物理层还需要处理电缆的插头该有多少根引脚及各引脚应如何连接。但具体的物理层实现并不在物理层协议内,如同轴电缆,无线信道等。
运输层基本概念
复用:应用层所有的应用进程都可以通过运输层再传送到网络层(IP层)。
分用:从网络层收到数据后必须明确交付指明的应用进程。
协议端口:简称端口(protocol port )。虽然通信的终点是应用进程,但我们只要把需传送的报文交到目的主机的某一个合适的目的端口,剩下的工作交由TCP或UDP来完成。
UDP和TCP的首部格式中,都有源端口和目的端口两个字段。当运输层收到IP层交上来的运输层报文时,就能根据目的端口把数据交付应用层的目的应用进程。TCP/IP的运输层用一个16位端口号来标志一个端口。端口号只有本地意义,是标志本计算机应用层中的进程和运输层交互时的层间接口。在因特网中,相同的端口号是没有关联的。
计算机中进程相互通信,不仅必须知道对方的IP地址,还要知道对方的端口号。因此,运输层的端口号共分为两大类:服务器端使用的端口号和客户端使用的端口号。
服务器端使用的端口号
又分两类:熟知端口号和登记端口号。
熟知端口号,数值为0~1023,IANA把这些端口指派给了TCP/IP最重要的一些应用程序,当出现一种新的应用程序后IANA就为它指派一个熟知端口。常见熟知端口如下:
另一类登记端口:数值为1024~49151,此类端口是为没有熟知端口号的应用提供的。使用此类端口必须在IANA按规定手续登记。
客户端使用的端口号
客户端使用的端口号,数值为49152~65535,此类端口仅在客户进程运行时才动态选择。
TCP简介
TCP(Transmission Control Protocol)传输控制协议。面向连接的、可靠的数据传输服务(尽管下层线路仍是不可靠的)。
TCP特点
PS:TCP的连接、可靠传输的工作原理、可靠传输的实现、TCP的流量控制、TCP的拥塞控制、运输连接管理都有相关知识,另外开篇整理。
UDP(User Datagram Protocol)
UDP是用户数据报协议。无连接的,不保证传输可靠性的传输服务。UDP只在IP数据服务之上增加了复用和分用的功能及差错检测的功能。
UDP特点
UDP首部格式
用户数据报UDP有两个字段:数据字段和首部字段。首部由8个字节,4个字段组成,一个字段两个字节。
- 源端口 -- 在需要对方回信时使用。不需要时可用全0;
- 目的端口 -- 在终点交付报文时必须使用到;
- 长度 -- UDP用户数据报的长度,最小是8(仅有首部);
- 检验和 -- 检测UDP用户数据报在传输中是否有错。
[图片上传失败...(image-7b5b36-1528963145287)]
PS: 伪首部只在计算检验和时临时添加,既不向上传送要不向下递交。
TCP和UDP的区别是什么?
- 从连接角度考虑:TCP是面向连接,UDP是无连接的;
- 从可靠性上:TCP能保证可靠交付,UDP是尽最大努力交付;
- 传输数据格式上:TCP是面向字节流的,UDP是面向报文的;
简述TCP的三次握手过程?
TCP的连接建立过程叫做三次握手(three-way handshake)。
一:客户端向服务器发出连接请求报文段,首部中的同步位SYN=1,同时选择初始序号seq = x。客户端进入SYN-SENT(同步已发送)状态。
二:服务器收到请求报文后,如同意建立连接,则向A发送确认。在确认报文中应把SYN位和ACK位置1,确认号是ack = x + 1,选择自己的初始化序号seq = y。服务器进程进入SYN-RCVN(同步已收到)状态。
三:客户端收到服务器的确认后,再向B给出确认。此时TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。
当服务器收到客户端的确认后,也进入ESTABLISHED状态,即可进行数据传输。
PS:为何需要对服务器进行确认呢?客户端发出的请求可能因为延误,在连接释放后才到达服务器,此时服务器建立连接会导致服务器资源浪费。