概述
- 网络层时为主机之间提供逻辑通信
- 传输层向应用层提供进程间端到端的逻辑通信服务(U形通信路路线)
- 运输层向上层用户屏蔽了下面网络核心的细节,使应用进程看到的就是好像在两个运输层实体之间有一条端到端的逻辑通信通道。
- 传输的数据单位:运输协议数据单元TPDU
用户数据报协议UDP(User Datagram Protocol)
- 传送的数据单元是UDP数据报
- 无需建立连接
传输控制协议TCP(Transmission Control Protocol) - 提供面向连接的服务,先建立连接在传输数据,最后释放连接
传输层端口 - 复用:应用层的所有应用进程都可以通过传输层在送到网络层
- 分用:传输层从IP层收到数据后,交付给指定的进程
- 前提:在本地计算机系统中的进程使用进程描述符标志运行在操作系统中的多个进程,而在互联网环境下,运行在应用层的各种应用进程不可以用进程标识符,因为不同计算机使用的操作系统千差万别,需要用统一的方式去使得不同操作系统的计算机应用可以通过互联网通信。
- 在运输层使用协议端口号(port)可以解决这个问题,通信的终点是应用程序进程,但我们把数据交给目的主机某个合适端口,剩下的交付过程交给TCP
- 区分,硬件端口是不同硬件设备进行交互的接口,软件端口是应用层的各种协议进程与运输实体之间进行层间交互的一种地址。
- 传输层收到IP层交上来的传输层报文,根据首部的目的端口号把数据交付给应用层的目的应用进程。
服务器端的端口号
应用进程 | 熟知端口号 |
---|---|
FTP | 21 |
TELNET | 23 |
SMTP | 25 |
DNS | 53 |
TFTP | 69 |
HTTP | 80 |
SNMP | 161 |
SNMP(trap) | 162 |
- 熟知端口号(系统端口号):指派给TCP/IP最重要的一些应用程序,让所有用户都知道。
- 登记端口号 :为没有熟知端口号的程序所使用
客户端的端口号
用户进程运行时动态选择,留给客户进程选择是暂用,又称为短暂端口号。服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因此可以把数据发给客户进程,通信结束后使用过的客户端口号失效,这个端口号可供其他客户进程使用。
用户数据报协议UDP
- UDP是无连接的:发送数据前无需建立连接
- 使用尽最大努力交付
- 面向报文的,对应用层交下来的报文,加上首部后交给IP层。
- 没有拥塞控制
- 支持一对一,也支持一对多的交互通信
- 首部开销小
UDP格式 - 首部
- 源端口,目的端口,长度,检验和
- 数据部分
- 传输层从IP层收到UDP数据报时,根据首部的目的端口,把UDP数据报通过相应的端口,上交给最后的终点-应用进程。
传输控制协议TCP
- 面向连接的传输层协议:建立TCP连接,传输数据完毕之后,释放已经建立的TCP连接。
- 每一条TCP连接只能有两个端点,是点对点通信。
- 提供可靠交付的服务。
- 提供全双工通信
- 面向字节流:流入进程和从进程流出的数据时以流的形式的字节序列,应用进程与TCP交互是以数据块,TCP将应用程序交下来的数据看成一串字节流,发送方怎么发就怎么收,接受方将所有的字节流还原为应用层数据并交上去到上一层的应用程序中。
TCP的连接 - 每一条TCP连接唯一地被通信两端的两个端点(socket套接字)
- Socket(套接字):(IP地址 :端口)
- 同一个IP地址可以有多个不同的TCP连接,同一个端口号也可以出现在多个不同的TCP连接中。
可靠传输的工作原理
TCP报文是交给IP层传输,IP层提供尽最大努力交付(不可靠传输),需要协议控制使得传输可靠。
停止等待ARQ 协议
- 停止等待:发送方每发送一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。
- 当出现差错时:
- 发送方发送完一个分组后,必须暂时保存已发送的分组的副本,只有收到了相应的确认才清除副本。
- 当一段时间后未收到接收方的确认,就超时重传。(而接收方接收不到分组或者接收的分组有差错则丢弃但不报告)
- 通过上述的确认机制和重传机制,就可以实现在不可靠的传输网络上实现可靠的通信。
连续ARQ协议
- 发送方维持一个发送窗口,收到一个确认就向前移动一个位置
- 接收方采用累积确认方式,对按序到达的最后一个分组到达后发送确认。
TCP 报文的首部格式
- 首部前二十个字节是固定的
- 源端口
- 目的端口
- 序号:数据的第一个字节的序号
- 确认号:期待收到对方下一个报文段的第一个数据字节的序号(上一个收到的报文的下一个字节
- 数据偏移:TCP报文段的首部长度
- 保留
- 紧急URG(当1时,发送应用程序就告诉发送方的TCP有紧急数据要传送)
- 确认ACK 当ACK为1才有效,TCP规定连接建立后所有报文都要把它置为1
- 推送push:希望立即 得到相应
- 复位RST:当为1时表示TCP连接出现了严重错误,需要释放连接重新建立。
- 同步SYN:连接建立时用于同步序号,为1时表明是个连接请求报文,若对方同意建立连接则在响应报文置SYN为1,ACK=1。
- 终止FIN,释放一个连接,为1时表明此报文段的发送方的数据已经发送完毕,并请求释放运输连接。
- 窗口:发送本报文段一方的接收窗口,窗口值为从本报文首部的确认号算起,接收方允许对方发送的数据量。(作为接收方让发送方设置其发送窗口的依据)
- 检验和
- 紧急指针
- 选项
TCP可靠传输的实现
以字节为单位的滑动窗口
- 发送方的发送窗口:在没有收到B的确认的情况下,可以把窗口内的数据都发送出去,凡是已经发送的数据,未收到确认前都必须保存暂时保留,以便超时重传。
- 发送缓冲区缓冲发送程序传递给发送方TCP的准备发送的数据和TCP已经发送但未收到确认的信息。
- 接收方的接收窗口:只有当数据按序号收到确认后才往前移动窗口,没有按序到达就暂存在接收窗口。
- 接收缓冲区缓冲按需到达但是未被接收程序读取的数据
- 未按序到达的数据。
- 特点:
- 发送方窗口根据接收方接收窗口而定
- 对于不按序到达的数据通常先暂存与接收窗口,等到齐再交付上层。
- TCP接收方要有累积确认功能,减少发送方的重传。
超时重传时间
- 使用自适应算法:RTO = RTTS(加权平均值)+ 4 * RTTD(偏差的加权平均值)
选择确认SACK
- TCP接收方接收不连续数据后,先接收暂存把已接收信息发送给发送方,避免重复发送。
TCP的流量控制
- 流量控制:让收发方速率均衡
- 使用不同的方法控制TCP发送报文的时机:
Nagle算法 - 若发送进程把要发送的数据逐个字节传送到TCP发送缓冲,则发送方TCP把第一个字节先发送过去,把后面到达字节先存放在缓冲中,等接收到第一个字节的确认后,再把发送缓存中的所有数据组组成一个报文发送出去,同时继续执行对后续数据的缓存。
糊涂窗口综合症 - 解决接收方进程读取缓存数据过慢的问题,可以让接收方等待一段时间,使得接收缓存有足够的空间,发送方才发送确认报文,通知发送方自己接收窗口的大小。
拥塞控制
- 拥塞:对网络资源的需求大于该资源的可用部分。
- 拥塞控制:防止过多的数据注入网络,使得网络中的路由器或链路不致过载。(抑制发送端发送数据的速率)
- 发送方维持拥塞窗口,大小取决于网络的拥塞程度,发送方的发送窗口要等于拥塞窗口。
- 拥塞控制方法:慢开始,拥塞避免,快重传,快恢复
慢开始 - 当主机开始发送数据时,由小到大逐渐增大发送窗口,每经过一个传输轮次就,拥塞窗口就加倍。
拥塞避免 - 拥塞窗口缓慢增大,每经过一个往返时间RTT就将发送方的拥塞窗口+1,缓慢增长。
- 慢开始门限
- 当拥塞窗口<门限 ,使用慢开始算法
- 当拥塞窗口>门限,改用拥塞避免算法
- 当拥塞窗口=门限,两种都可以
- 只要发送方判断出现网络拥塞,则将门限减半,并将拥塞窗口置为1,执行慢开始算法。
快重传算法 - 要求接收方每收到一个失序的报文段就发重复确认而不是等待发送数据时稍带确认,让对方及时知道。
快恢复算法 - 当发送方连续接受到三个重复确认,执行乘法减半算法,把慢开始门限减半。
TCP的传输连接管理
TCP是面向连接的协议,每一次面向连接的通信中必经三个阶段:建立连接,数据传送,释放连接。
TCP连接的建立采用C/S模式,主动发起连接的应用程序是client,被动等待连接建立的应用进程是服务器。
在TCP连接建立过程中:
- 使得每一方都确知对方的存在
- 运行双方协商参数
- 能够对运输实体资源进行分配。
TCP的连接建立-三次握手 - 未连接之前,client A主机和 serverB主机都是处于关闭状态
- B TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求,然后服务器进程处于LISTEN状态,等待客户端连接。
- A主机的TCP客户进程也是建立传输控制块TCB,向B发出连接请求报文段,首部的同步位SYN为1,不能携带数据,此时TCP客户进程处于同步已放松状态。
- B主机收到连接请求报文段后,如果同意连接则向A主机发送确认(确认报文SYN=1,ACK= 1),该报文不能携带数据。TCP服务进程进入同步收到状态
- TCB客户进程接收到B的确认后,还给B发送一个确认(ACK=1),进入已建立连接状态
- B主机收到A的确认,进入已建立连接状态。
TCP连接释放-四次握手
- 数据传输完毕,客户进程和服务进程都处于已经建立连接状态。
- A主机的客户进程先向TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接(报文段的FIN=1),进入终止等待1状态
- B主机收到连接释放报文段发出确认报文,进入关闭等待状态。(此时TCP连接半闭合状态,A无数据发,B可以发数据,A可以接收数据,持续一段时机)
- A收到确认后,进入终止等待2状态,等待B主机发送连接释放报文段。
- ,若B无数据发送,其服务进程通知TCP释放连接。此时B发送连接释放报文段时FIN=1,进入最后确认状态,等待A的确认。
- A在收到了BB的连接释放报文后,发出确认,进入使劲按等待状态,过了一段时间后就进入关闭状态。撤销传输控制块,结束TCP连接。
- B只要收到A的确认就进入关闭状态,撤销传输控制块TCB,结束这次TCP连接。
应用层
域名系统DNS
- 用户与互联网主机通信,需要知道对方的IP地址,当时IP长而难记,但是机器处理IP数据报需要用到IP地址,所以使用主机的名字去通信,域名服务器程序负责把域名解析到服务器。
- 互联网的域名系统是联机分布式数据库系统,采用C/S模型。大部分在本地完成解析,部分需要联网。
- 域名到IP的解析过程:当某个进程需要将主机名解析为IP,调用解析程序,成为DNS的一个客户,向本地DNS服务器发送UDP请求,UDP本地查找,若找到则将IP地址应答给应用进程
- 找不到,本地域名服务器作为客户向其他域名服务器发出请求,直到找到可以应答的该请求的域名服务器为止。
层次域名空间
-
域名由标号序列组成,顶级域名在右边 如: www.gzhu.edu.cn
- 顶级域名:国家顶级域名,通用顶级域名,基础结构域名
- 二级域名:类别域名,行政区域名
域名服务器
-
区:一个服务器所负责管辖的范围叫做区。每一个区设置相应的权限域名服务器,用来保存该区的所有主机的域名到IP的映射。
-
根域名服务器:根域名服务器是最高级的域名服务器。所有的根服务器知道所有的顶级域名服务器的域名和IP地址。
-
顶级域名服务器:负责管理在该顶级服务器注册的所有二级域名,当收到DNS查询请求时,给出相应的应答。
-
权限域名服务器:当一个权限域名服务器:负责一个区域的域名服务器,当一个域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应该找那个域名服务器。
-
本地域名服务器:PC主机接入的局域网中,需要查找域名时,先向本地域名服务器发起查询请求。
FTP 传送协议
- FTP提供交换式的访问,允许客户指明文件的类型和格式。并允许文件有存取权限。FTP屏蔽了个计算机系统的细节,适合于以后网络中人与计算机之间传文件。
- 文件共享协议的一个类是联机访问,允许多个程序同时对一个文件存取。不需要特殊的客户进程,直接由操作系统提供对远处共享文件进行访问服务,操作系统中文件系统就像处理本地文件一样处理远地文件,提供透明存取(原本用于处理本地文件的应用程序直接处理远地文件而不同做出改变),如网络文件系统NFS
基本工作原理
- FTP使用TCP可靠的运输服务,使用客户服务器方式
- 一个FTP服务器进程同时为多个客户端提供服务,FTP服务器进程由一个主进程(负责接受新的请求),另外有若干从属进程负责处理单个请求
- 主进程不断接收请求,每接收要给请求就启动一个从属进程去处理,从属进程还可能创建其他进程
- 一个FTP服务器进程同时为多个客户端提供服务,FTP服务器进程由一个主进程(负责接受新的请求),另外有若干从属进程负责处理单个请求
- 服务器会有两个从属加进程(控制进程和数据传送进程),在进行文件传输时,FTP客户端和服务器会建立两个并行的TCP连接(控制连接和数据连接)
- 控制连接在这个会话期间都保持打开,FTP客户发送的传传送请求,通过控制连接发送给服务器的控制进程,控制进程不用来传文件
- 控制进程在收到客户端的文件传输请求后,创建数据传送进程,和数据连接,用来连接客户端和服务器的数据传送进程,由传送进程完成文件的传送,在传送完毕后关闭"数据传送连接"并结束运
简单文件传送协议TFTP
- TCP/IP协议族中的简单文件传送协议TFTP,小而容易实现,采用客户-服务器方式,使用DUP数据报,代码占用内存小
- 当接通电源时,设备执行只读存储器中的代码,网络上广播一个TFTP请求,服务器发送响应(包括可执行二进制程序)
- 设备接收后就放入内存,执行程序
远程终端协议TELNET
- 用户用TELNET在所在地通过TCP连接登录到远端的另一台主机上(使用主机名或者IP地址),TELNET能将用户的击键传送到远地主机,同时能将远地的输出通过TCP连接返回到用户屏幕,这种服务是透明的,因为用户感觉到键盘和显示器直接连接到远地主机
- 本地系统运行客户进程,远地主机运行服务器进程
- 数据和命令都是转换为网络虚拟终端(NVT)格式传送
万维网WWW
- 大规模的联机式的信息储藏所,提供分布式服务,多个网点分布在互联网各个位置,通过互联网连接到另外的万维网站点
- 万维网是一个分布式超媒体系统,是超文本的扩充
- 超文本:包含指向其他万维网站点的其他文档的链接的文本,由多个信息源链接而成,利用链接可以使得用户找到另一个文档,这些文档可以位于所有的连接在互联网的超文本系统中
- 超媒体:除了文本外还包含图形,声音,视频等
- 万维网把大量信息分布在互联网,不同的主机的文档独立管理,导致万维网文档之间的链接可能不一致
- 以客户-服务器形式工作:
- 浏览器就是用户主机上的万维网客户程序
- 万维网文档所驻留的主机则运行服务器程序
- 客户端向服务器发送请求,服务器向客户端送回万维网文档,在客户程序中显示的万维网文档成为页面
- 万维网使用统一资源定位符URL来标志万维网上的各种文档,每个文档在整个互联网具有唯一的标识符URL
- 万维网客户程序和服务器程序之间的交互遵循超文本传送协议HTTP(应用层协议,使用TCP连接进行可靠的传送),
- 万维网使用超文本标记语言HTML,使得万维网页面设计者都方便从本页面链接到互联网的任何一个页面,并在主机屏幕的浏览器显示
统一资源定位符URL - URL 格式
- URL表示从因特网得到的资源位置和访问这些资源的方法
- 相当于文件名在互联网的扩展, 与因特网相连的机器上的任何可访问对象的一个指针
- 格式:<协议>://<主机:<端口/路径 如清华大学主页http://www.tsinghua.edu.cn ;从页面http://tsinghua.edu.cn/chn/yxsz/index.html
- 其中端口和路径可以省略,此时URL指到一个主页,通过主页可以链接到其他站点
超文本传送协议HTTP
- 协议定义了浏览器(万维网客户端进程)怎样想服务器发送请求,以及万维网服务器怎样把文档回送给浏览器.
- 工作过程:
- 每个万维网站点都有一个服务器进程,不断监听TCP80:端口,轮询请求
- 一但发现监听到建立请求并建立TCP连接后,浏览器就向服务器发送某个页面请求
- 万维网服务器接收请求并返回所请求的页面作为响应
- TCP连接被释放
- HTTP规定客户与服务器之间的每次交互,都由一个ASCII码串和一个类似通用因特网邮件扩充
- 用户浏览页面方式有两种:
- 在浏览器的地址窗口键入要查找的页面的URL
- 在某个页面用鼠标点击可选部分,浏览器自动调跳转到指定的页面
- 用户在点击鼠标链接某个万维网文档时,HTTP协议先和服务器建立TCP连接(三次握手),在两次握手完成后,客户就把HTTP请求报文作为第三次握手的第三个报文端捎带客户对万维网文档的请求
- HTTP/1.1协议的持续连接由两种方式:
- 非流水线:接收到一个响应后才能发出下一个请求
- 流水线:客户在接收到HTTP的响应报文前就可以接连发送新的请求报文,减少TCP连接空闲时间,提高下载文档的效率
代理服务器
- proxy server 是一种网络实体,称为万维网高速缓存,把一些请求和响应暂存在本地磁盘种,等新的请求到达时,若代理服务器发现整个请求与暂存的请求相同,则就返回暂存的响应,不需要用URL去互联网访问该资源,代理服务器可以客户端工作也可以在服务器端工作,也可以在中间系统上工作
- 工作流程:
- 校园网主机的浏览器向互联网的服务器发出请求时,先和校园网的 代理服务器建立TCP连接,并向代理服务器发出HTTP请求报文
- 若代理服务器中有该请求的URL的对象的缓存,将将其放到HTTP响应报文中返回给主机的浏览器
- 否则,代理服务器就代表发出请求的用户浏览器,与因特网的源点服务器建立TCP连接,并发送请求报文
- 源点服务器把所请求的对象放在HTTP响应报文中返回给校园网代理服务器
- 代理服务器先将其复制到自己的本地存储器中,在把对象放在HTTP响应报文,返回给请求该对象的主机浏览器中
- 代理服务器既作为服务器,又作为客户端
静态万维网文档 - HTML超文本标记语言:制作万维网页面的标志语言,消除了不同计算机之间信息交流的障碍,是万维网浏览器使用的一种语言
- HTML插入图像:
- 内含图像
- 链接:本地连接,远程链接
- HTML插入图像:
- XML可扩展标记语言,与HTML类似,但是主要是用于传输数据而不是显示数据,是对HTML的补充
- XHTML可扩展超文本标记语言,逐渐替代HTML
- CSS语言:层叠样式表,用于为HTML文档定义布局,HTML用于结构化内容,而CSS用于格式化结构化的内容
动态万维网文档 - 静态万维网文档的内容在被用户浏览过程是不变的
- 动态文档指文档的内容在浏览器访问万维网服务器时才由应用程序动态构建,当浏览器请求到达时,万维网服务器要运行另一个应用程序,并把控制转移到此应用程序,接着该应用程序对浏览器发来的数据进行处理(通过CGI程序生成动态HTML文档),并输出HTTP格式的文档,万维网服务器把应用程序的输出作为对浏览器的响应
活动万维网文档 - 像动画一样的浏览器显示效果,由两种技术实现浏览器屏幕显示的连续更新:
- 服务器推送:将所有的工作都交给服务器,不断地运行与动态文档相关联的应用程序,定期更新信息和发送新文档
- 活动文档:所有的工作都转移到浏览器,每当浏览器请求一个活动文档时,服务器返回一段活动文档程序副本,使该程序在浏览器端运行,该程序直接与用户交互
电子邮件相关协议
- 收发邮件过程:
- 发送方使用用户代理撰写和显示邮件,利用邮件发送协议发送到用户所使用的邮件服务器
- 发送方邮件服务器通过TCP连接将邮件发送给接收方的邮件服务器
- 接收方从通过用户代理,从本地邮件服务器接收邮件
- 简单邮件传送协议SMTP:规定了两个相互通信的SMTP进程之间如何交换信息
- 建立连接:发件人的邮件发送到发送方的邮件服务器的邮件缓存,SMTP客户间隔扫描缓存,发现邮件则与接收方SMTP邮件服务器建立TCP连接
- 邮件发送:
- 连接释放
- 邮件读取协议POP3和IMAP
- 通用因特网邮件扩充MIME
动态主机配置协议DHCP
- 它提供一种机制-即插即用连网:允许一台计算机加入新的网络和获取IP地址而不用手工参与
- 采用客户-服务器方式
- 需要IP地址的主机,广播一个报文
- DHCP中继代理发现广播报文,则单播发给DHCP服务器
- 服务器查询是否已经该主机的IP地址等配置信息,若有则直接返回,无则从服务器IP地址池中分配一个进行返回
简单网络管理协议SNMP
- 管理程序和代理程序按客户-服务器方式工作,管理程序运行SNMP客户程序,代理程序运行SNMP服务器程序,在被管理的对象上运行的SNMP服务器程序不断监听来自管理站的SNMP客户程序的请求,一旦发现则返回管理站所需的信息或执行某个动作
socket系统调用
- 大多数操作系统使用系统调的机制在应用程序和操作系统之间传递控制权
- 当某个应用进程启用系统调用时,控制权从应用程序传递给系统调用接口,此接口将控制权传递给操作系统,操作系统转给某个内部过程执行请求的操作;操作执行完毕,控制权又通过系统调用接口返回给应用进程
- TCP/IP协议软件已经驻留在操作系统中,UNIX中使用Socket API
- socket使用过程:
- 当应用进程需要使用网络进行通信时,首先发出socket系统调用,请求操作系统创建一个socket(就是请求操作系统把网络通信所需的系统资源分配给该应用进程),
- 操作系统为这些资源的总和用一个socket 描述符表示,返回给应用程序,通过描述符操作系统可以识别该进程所申请的服务
- 通信完毕,应用程序通过一个关闭套接字的close系统调用通知操作系统回收与该套接字的描述符相关的所有资源
- TCP服务的系统调用使用过程:
- 连接建立过程:
- 套接字创建后,应用进程要用bind来指明套接字的本地地址(本地IP和本地端口),在服务器调用bind就是把熟知的端口和本地IP写入已经创建的套接字中(称为把本地地址绑定到套接字),在客户端可以不绑定,由操作系统自动分配一个动态端口号
- 服务器调用bind后,需要调用listen(监听)把套接字设置为被动方式,随时接收客户的服务请求,UDP只提供无连接服务,不需要监听
- 服务器紧接着调用accept系统调用,把远地客户进程发来的连接请求提取出来(主服务器进程一调用accept,就为每一个连接创建一个套接字并将这个套接字的标识符返回给发起连接的客户进程,此时服务器还创建一个从属服务器进程负责处理新建立的连接与客户端收发数据,通信结束后该从属服务器进程就关闭这个新的套接字并撤销从属服务器,而主服务器进程继续接收下一个连接请求)
- 数据传送阶段
- 客户和服务器都在TCP连接上shiyongsend系统调用传送数据,使用recv系统调用接收数据
- 连接释放阶段
- 一旦客户和服务器都结束使用套接字,就把套接字撤销,调用close释放连接和撤销套接字
- 连接建立过程:
来源:CSDN
作者:binge_kong
链接:https://blog.csdn.net/binge_kong/article/details/102666349