复习计算机网络
HTTP用的什么连接
HTTP/1.0中,默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive
使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
在浏览器中输入一个网址它的运行过程是怎样的?
- 查询DNS,获取域名对应的IP
- 根据目标服务器IP地址和端口号,调用系统库函数socket,请求一个tcp流套接字。客户端向服务器发送HTTP请求报文:
- 应用层:客户端发送HTTP请求报文;
- 传输层:(加入源端口、目的端口)建立连接。在实际发送数据前,三次握手以建立起一个TCP连接;
- 网络层:(加入IP头)路由寻址;
- 数据链路层:(加入frame头)传输数据;
- 物理层:物理bit传输;
- 服务器端:经过物理层 - 数据链路层 - 网络层 - 传输层 - 应用层,接收到请求报文,并解析,发送HTTP响应报文。
- 关闭连接,TCP四次挥手;
- 客户端解析http响应报文,浏览器解析HTML并展示。
TCP & UDP的区别
tcp | udp |
---|---|
tcp面向连接 | 无连接,发送数据前不需要建立连接 |
提供可靠服务 | 尽最大努力交付。不保证可靠 |
面向字节流 | 面向报文 |
连接点到点 | 1:1 1:n n:1交互通信 |
首部开销20字节 | 首部8byte |
其逻辑通信信道是全双工的可靠信道 | 不可靠信道 |
流量控制 | |
拥塞控制:慢开始,拥塞避免,快重传,快恢复 |
TCP提供的可靠服务:通过TCP连接传送的数据,无差错、不丢失、不重复、按序到达。
TCP面向字节流:把数据看成一连串的无结构的字节流;
UDP面向报文: 应用层交给UDP多长的报文,UDP照样发,一次发送一个报文。
- udp没有拥塞控制,当网络出现拥塞不会使源主机降低发送速率,应用于实时视频等;
TCP传输协议:
- SMTP, TELNET, HTTP, FTP
UDP传输协议:
- DNS, TFTP, RIP路由选择协议, DHCP/BOOTP配置ip地址, SNMP, NFS远程文件服务
tcp如何保证可靠性
确认和重传机制
- 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础;
- 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传。
数据排序
- TCP有专门的序列号SN字段,可提供数据re-order;
流量控制
- 使用 滑动窗口和计时器。
- TCP窗口中会指明双方能够发送接收的最大数据量,发送方通过维持一个发送滑动窗口来确保不会发生由于发送方报文发送太快接收方无法及时处理的问题。
拥塞控制
“慢启动”(Slow Start)
“拥塞避免”(Congestion avoidance)
“快速重传 ”(Fast Retransmit)
“快速恢复”(Fast Recovery)
TCP的流量控制
TCP断连过程
四次挥手原因:
客户A要结束连接,即A不再发送数据;服务器B可能还在处理数据,此时处于“半关闭状态”;
A可以不接受数据或选择再接收一段时间。
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。
关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
备注:TCP的状态位:SYN发起一个连接,开始同步;ACK应答;RST重新连接;FIN结束连接。
socket编程 与 http协议
- 通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。
- 但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
- HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
- 很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端。
- 因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。
两个机器之间的通讯过程
- pc1判断目标ip是否与自己再同一网段,即进行ARP广播,解析出MAC地址。不是,则将网关的MAC地址作为报文的MAC地址。
- pc2封装的数据包括:目标、源的端口号、IP、mac地址。
- 交换机收到数据后,对比MAC地址表,知道从哪个口发出数据;
- 路由收到数据后,根据路由表将数据发往下一个目标地;
- 最后一个路由通过ARP解析出pc2的MAC地址。
TCP三次握手、四次挥手
CIDR
数据单元
网络层:分组交换(虚电路、数据报);
传输层:报文段;