协议体系结构
- OSI分层(7层)
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 - TCP/IP分层(4层)
链路层、网络层、运输层、应用层 -
五层协议(5层)
物理层、数据链路层、网络层、运输层、应用层
TCP协议
概念
- TCP提供一种面向连接的,可靠的字节流服务(类似于打电话)
- 在一个TCP连接中,仅有两方进行彼此通信,广播和多播不能用于TCP
- TCP使用校验和、确认和重传机制保证可靠传输
三次握手
- SYN=1,ACK=0,seq=x 客户端进入SYN_SEND状态
- SYN=1,ACK=1,seq=y,ack=x+1
- ACK=1,seq=x+1,ack=y+1
为什么三次握手
为了防止已失效的连接请求突然又传回了服务端,因而产生了错误。
client发出的某个连接请求报文段没有丢失,而是在某个网络节点长时间滞留了,以至延迟到连接释放以后某个时间才到达server。本来这是一个已经失效的报文段,但server收到此失效的连接请求报文段后,就以为是client再次发送一个新的连接请求。于是就向client发送确认报文段,同意建立连接。如果不采用三次握手,这是新的连接就建立了。由于此时client并没有发起建立连接的请求,因此不会理睬server的确认,也不会向server发送ack包。而server则一直等待client发送数据,所以server的很多资源就浪费了。
四次挥手
- FIN=1,seq=x
- 1
- 2
- 3
- 1
- 2
- 3
- ACK=1,ack=x+1
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- FIN=1,seq=y
- 1
- 2
- 3
- 1
- 2
- 3
- ACK=1,seq = y+1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
为什么四次挥手
tcp是全双工模式
服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
SYN攻击
- 什么是 SYN 攻击(SYN Flood)?
在三次握手过程中,服务器发送 SYN-ACK 之后,收到客户端的 ACK 之前的 TCP 连接称为半连接(half-open connect)。此时服务器处于 SYN_RCVD 状态。当收到 ACK 后,服务器才能转入 ESTABLISHED 状态.
SYN 攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。
SYN 攻击是一种典型的 DoS/DDoS 攻击。 - 如何检测 SYN 攻击?
检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。在 Linux/Unix 上可以使用系统自带的 netstats 命令来检测 SYN 攻击。 - 如何防御 SYN 攻击?
SYN攻击不能完全被阻止,除非将TCP协议重新设计。我们所做的是尽可能的减轻SYN攻击的危害,常见的防御 SYN 攻击的方法有如下几种: - 缩短超时(SYN Timeout)时间
- 增加最大半连接数
- 过滤网关防护
- SYN cookies技术
对应的协议
- FTP:定义了文件传输协议,使用21端口。
- Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
- SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
- POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
- HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP协议
源端口号、目的端口号、UDP头长度、校验和
对应协议
- DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
- SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
- TFTP,简单文件传输协议,该协议在熟知端口69上使用UDP服务。
TCP和UDP区别
- TCP是面向连接的,UDP是无连接的。
- TCP提供可靠的服务,数据无错误,不丢失,不重复,按顺序到达。UDP没有保证。
- TCP面向字节流。UDP面向报文,UDP没有congestion control,适用于real-time transfer.
- TCP连接是点对点的,UDP支持多对多通信。
- TCP头部20字节,UDP头部8字节。
面向连接和非面向连接的服务的特点是什么?
面向连接
面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
非面向连接
非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信额时候,发送节点就可以往网络上发送信息,让信息自主在网络上传播,一般在传输过程中不再加以监控。
浏览器输入www.baidu.com后执行的全过程
#### 事件顺序
- 浏览器获取输入的域名www.baidu.com
- 浏览器向DNS请求解析www.baidu.com的IP地址
- 域名系统DNS解析出百度服务器的IP地址
- 浏览器与该服务器建立TCP连接(默认端口号80)
- 浏览器发出HTTP请求,请求百度首页
- 服务器通过HTTP响应把首页文件发送给浏览器
- TCP连接释放
- 浏览器将首页文件进行解析,并将Web页显示给用户
涉及到的协议
-
应用层:HTTP(WWW访问协议),DNS(域名解析服务)
域名解析
-
传输层:TCP(为HTTP提供可靠的数据传输),UDP(DNS使用UDP传输)
为数据包选择路由
-
网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测)
-
数据链路层:ARP(将本机的默认网关IP地址映射成物理MAC地址)
相邻节点的可靠传输
DNS域名系统
当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。
交换机、路由器、网关
交换机
在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中。
交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。
交换机被广泛应用于二层网络交换,俗称“二层交换机”。
交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机分别工作在OSI七层模型中的第二层、第三层、第四层盒第七层,并因此而得名。
路由器
路由器是网络中进行网间连接的关键设备。作为不同网络之间互相连接的枢纽,路由器系统构成了基于 TCP/IP 的国际互连网络 Internet 的主体脉络。
路由器之所以在互连网络中处于关键地位,是因为它处于网络层,一方面能够跨越不同的物理网络类型(DDN、FDDI、以太网等等),另一方面在逻辑上将整个互连网络分割成逻辑上独立的网络单位,使网络具有一定的逻辑结构。路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点。 路由器的基本功能是,把数据(IP 报文)传送到正确的网络,细分则包括:1、IP 数据报的转发,包括数据报的寻径和传送;2、子网隔离,抑制广播风暴;3、维护路由表,并与其它路由器交换路由信息,这是 IP 报文转发的基础;4、IP 数据报的差错处理及简单的拥塞控制;5、实现对 IP 数据报的过滤和记帐。
路由器构成了 Internet 的骨架。它的处理速度是网络通信的主要瓶颈之一,它的可靠性则直接影响着网络互连的质量。因此Internet 研究领域中,路由器技术始终处于核心地位。
网关
网关(Gateway)又叫协议转换器,是一种复杂的网络连接设备,可以支持不同协议之间的转换,实现不同协议网络之间的互连。网关具有对不兼容的高层协议进行转换的能力,为了实现异构设备之间的通信,网关需要对不同的链路层、专用会话层、表示层和应用层协议进行翻译和转换。
网关用于以下几种场合的异构网络互连:
- 异构型局域网,如互联专用交换网PBX与遵循IEEE802标准的局域网。
- 局域网与广域网的互联。
- 广域网与广域网的互联。
- 局域网与主机的互联(当主机的操作系统与网络操作系统不兼容时,可以通过网关连接)。
网关的分类
- 协议网关:协议网关通常在使用不同协议的网络区域间做协议转换。
- 应用网关:应用网关是在使用不同数据格式间翻译数据的系统。
- 安全网关:安全网关是各种技术的融合,具有重要且独特的保护作用,其范围从协议级过滤到十分复杂的应用级过滤。
所属层
物理层:中继器(Repeater,也叫放大器),集线器。
数据链路层:网桥,交换机。
网络层:路由器。
网关:网络层以上的设备。
IP协议
IP地址分类
A类地址:以0开头,第一个字节范围:0~127;
B类地址:以10开头,第一个字节范围:128~191;
C类地址:以110开头,第一个字节范围:192~223;
D类地址:以1110开头,第一个字节范围为224~239;
类别 | 最大网络数 | IP地址 | 最大主机数 | 私有IP地址范围 |
---|---|---|---|---|
A | 126(2^7-2) | 0.0.0.0-127.255.255.255 | 16777214 | 10.0.0.0-10.255.255.255 |
B | 16384(2^14) | 128.0.0.0-191.255.255.255 | 65534 | 127.16.0.0-172.31.255.255 |
C | 2097152(2^21) | 192.0.0.0-223.255.255.255 | 254 | 192.168.0.0-192.168.255.255 |
特殊地址
- 每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;
- IP地址中的每一个字节都为1的IP地址(255.255.255.255)是当前子网的广播地址;
- IP地址中凡是以“11110”开头的E类IP地址都保留用于将来和实验使用。
- IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.255.255.255用于回路测试,如:127.0.0.1可以代表本机IP地址,用“http://127.0.0.1”就可以测试本机中配置的Web服务器。
- 网络ID的第一个8位组也不能全置为“0”,全“0”表示本地网络。
HTTP协议
主要特点
- 支持客户/服务器模式。B/S C/S
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
常用的HTTP方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
- GET 请求获取Request-URI所标识的资源
- POST 在Request-URI所标识的资源后附加新的数据
- HEAD 请求获取由Request-URI所标识的资源的响应消息报头
- PUT 请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE 请求服务器删除Request-URI所标识的资源,与PUT相反
- TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNECT 保留将来使用
- OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
GET和POST区别
- get重点在于从服务器上获取资源,post重点在向服务器发送数据。
- get传输数据是通过URL请求,以filed=value的形式置于URL后,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户可见
- get传输数据量小,受限于RUL长度限制,但是效率高。post可以传输大量数据,所以上传文件时只能采用post方式
- get是不安全的,因为URL是可见的,可能会泄漏密码。post安全性高
- get只支持ASCII字符集,传中文可能乱码。post支持标准字符集,可以正确传递中文字符。
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
请求和响应报文格式
请求报文格式
请求行,请求头部,空行,请求数据四个部分。
响应报文格式
一般情况下,服务器接受并处理客户端发过来的请求后会返回一个HTTP的响应消息。
状态行,消息报头,空行,响应正文四个部分。
HTTP状态码
状态码有三位数字组成,第一个数字定义了响应的类别,共分为五类
1xx—指示信息—表示消息已接收,继续处理
2xx—成功—表示请求已经被成功接收,理解,接受
3xx—重定向—要完成请求必须更进一步的操作
4xx—客户端错误—请求有语法错误或者请求无法实现
5xx—服务器端错误—服务器未能实现合法的请求
常见状态码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
HTTP1.1 版本新特性
- 默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求
- 管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应
- 断点续传原理
HTTP缺点及优化与HTTPS
- 通信使用明文不加密,内容可能被窃听
- 不验证通信方身份,可能遭到伪装
- 无法验证报文的完整性,报文可能被篡改
优化方法
- 利用负载均衡优化和加速HTTP应用
- 利用HTTP Cache来优化网站
HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护