协议(protocol)
计算机网络协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送和接收或其他事件所采取的动作
协议分层(layer)
各层的所有协议被称为协议栈(protocol stack),因特网的协议栈由5个层次组成:
- 物理层:将帧中的bit一个个移动至下一节点
- 双绞铜线
- 同轴电缆
- 光纤
- 链路层:链路层分组称为帧(frame)
- 以太网
- WiiFi
- 电缆接入网的DOCSIS协议
- 网络层:数据报(datagram),通常简称IP层
- IP协议
- 一些路由选择协议
- 运输层:运输协议,报文段(segment)
- TCP
- UDP
- 应用层:把位于应用层的信息分组称为报文(message)
- HTTP:提供Web文档的请求和传送
- SMTP:提供电子邮件报文的传输
- FTP:提供两个端系统之间的文件传输
- DNS
应用层
网络应用程序体系结构
- 客户-服务器体系结构(client-server architecture):服务器接收客户主机发送的请求并相应,客户之间不直接通信
- P2P体系结构(P2P architecture):对等方主机之间直接通信,自拓展性(self-scalability)
进程通信
多数应用程序通过通信进程对组成,每对中的两个进程互相发送报文
进程通过一个称为套接字(socket)的软件接口向网络发送报文和接收报文
可靠数据传输(reliable data transfer):确保数据交付服务
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文
HTTP
- 超文本传输协议
- 使用TCP作为支撑运输协议
- 无状态协议(stateless protocol):不保存客户的任何信息
- Web浏览器实现了HTTP的客户端,Web服务器实现了HTTP的服务器端
- 使用HTTP协议访问另一个IP时,必须同时提供IP和端口号,缺一不可,浏览器添加了默认端口号80
- http://qq.com:80
非持续链接(non-persistent connection):每个请求和响应由一个单独的TCP链接发送
持续链接(persistent connection):所有请求及响应经相同的TCP链接发送
往返时间(Round-Trip Time,RTT):一个短分组从客户到服务器然后再返回客户的时间
HTTP报文格式
请求报文
方法字段, URL字段, HTTP版本字段 /请求行(request line)
/首部行(header line)
HOST:指明对象所在主机
Connection:是否使用持续链接
User-agent:浏览器类型
Accept-language:语言版本
- 方法字段:GET、POST、HEAD、PUT、DELETE
响应报文
协议版本字段,状态码,响应状态信息 /初始状态行(status line)
/首部行
connection:
Date:发送该响应报文的日期时间
server:服务器类型
Last-Modeified:对象创建或最后修改的日期
Content-Length:发送对象字节数
Content-Type:实体体中的对象类型
/实体体(entity body)
(data data data ……)
- 状态码
- 200 OK:请求成功
- 301 Moved Permanently:请求的对象永久转移
- 400 Bad Request:通用差错代码,服务器不能理解请求
- 404 Not Found:被请求的文档不在服务器上。
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
cookie
- HTTP响应报文中有一个cookie首部行
- HTTP请求报文中有一个cookie首部行
- 用户端系统中保留有一个cookie文件,由浏览器进行管理
- 位于Web站点的后端数据库
Web缓存(Web cache)
又叫代理服务器(proxy server)
FTP
SMTP
DNS
- 域名系统(Domain Name System)
- 进行主机名到IP地址转换的目录服务
- DNS是由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
- 运行在UDP协议之上,使用53号端口
- 同一台用户主机上运行着DNS应用的客户端,浏览器从URL中抽取出主机名,并将这台主机名传给DNS应用的客户端,DNS客户向DNS服务器发送一个包含主机名的请求,DNS客户最终收到一份回答报文,它能够向位于该IP地址80端口的HTTP服务器进程发起一个TCP连接。
- 根DNS服务器/顶级域(DNS)服务器/权威DNS服务器/本地DNS服务器
- DNS缓存
运输层
运输层协议只能工作在端系统
一个进程有一个或多个套接字(socket),每个套接字有唯一的标识符,标识符的格式决定它是UDP还是TCP套接字
多路分解(demultiplexing):将运输层报文段中的数据交付到正确的套接字的工作
多路复用(multiplexing):在源主机从不同的套接字中收集数据块,并为每个数据块封装上部首信息从而生成报文段,然后将报文段传递到网络层。
UDP
- 无连接运输,不会引入建立连接的时延
- 首部开销小 8字节
- 从应用进程中得到数据,附加上用于多路复用/分解服务的源和目的端口号字段,以及其他的小字段,然后将形成的报文段交给网络层。
TCP
可靠数据传输
拥塞控制
面向连接的运输
全双工服务(full-duplex service)
三次握手
- 第一步:客户端的TCP首先向服务器端的TCP发送一个特殊的TCP报文段。该报文端不包含应用层数据。但是在报文段的首部中的一个标志位(SYN比特)被置为1。这个报文段被称为SYN报文段,该报文段会被封装在一个IP数据报中,并发送给服务器。客户随机选择一个初始序号(client_isn),置于序号字段中
- 第二步:一旦包含TCP SYN报文段的IP数据报到达服务器主机,服务器就会从该数据报中提取出TCP SYN报文段,为该TCP连接分配TCP缓存和变量,并向该客户TCP发送允许连接的报文段。这个报文段称为SYNACK报文段,SYN比特为1,首部的确认号字段为client_isn+1,序号字段为服务器的初始序号(server_isn)
- 第三步:在收到SYNACK报文段后,客户也要为该连接分配缓存和变量。客户主机则向服务器发送另外一个报文段;这最后一个报文段对服务器的允许连接的报文段进行了确认(将值server_isn+1放置到TCP报文段首部的确认字)。因此连接建立了,SYN比特置为0。第三个阶段可以在报文段负载中携带客户到服务器的数据
终止连接:
客户TCP发送一个特殊的报文段,让其首部中的FIN比特被设置为1。服务器接收到该报文段后,回送一个确认报文段,即它自己的终止报文段,其FIN比特被置为1。最后,该客户对这个服务器的终止报文段进行确认。用于该连接的所有资源释放。
网络层
网络层分组成为数据报
最大传送单元(MTU):一个链路层帧能承载的最大数据量
IP数据报
IP协议:不可靠服务
IPv4
IPv6
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!