1.访问浏览器的过程
-
dns解析域名ip
arp获取网关地址 (地址解析协议)
- 组织数据发送给默认网关 mac是默认网关的mac地址
- 默认网关有转发数据的能力 把数据转发给路由器
- 路由器根据自己的路由协议
- 路由器根据自己的路由协议,来选择一个合适的较快的路径转发数据给目的网关
- 目的网关(dns服务器所在的网关),把数据转发给dns服务器
- dns服务器查询解析出baidu.com对应的ip地址,并原路返回请求这个域名的client
得到baidu.com的ip之后 会发送tcp的3次握手 进行连接
- 使用http协议发送请求数据给web服务器
2. 3次握手 4次挥手
3次握手
确定双方都准备好了 双方都会收到ACK包 确定对方都在
- 首先客户端向服务端发送一个带有SYN 标志,以及随机生成的序号100(0字节)的报文
- 服务端收到报文后返回一个报文(SYN200(0字节),ACk1001(字节+1))给客户端
- 客户端再次发送带有ACk标志201(字节+)序号的报文给服务端 至此三次握手过程结束,客户端开始向服务端发送数据。
4次挥手
客户端调用close() 另一端recv() 收到长度为0的请求
- 客户端发送带有fin标识的报文给服务端,请求通信关闭
- 服务端收到信息后,回复ACK答应关闭客户端通信(连接)请求
- 服务端发送带有fin标识的报文给客户端,也请求关闭通信
- 客户端回应ack给服务端,答应关闭服务端的通信(连接)请求
为什么2 3步不能合并 收到之后回应已经收到你的关闭请求 但是可能有数据还未处理完 处理完也发一个关闭请求
3.说一下什么是tcp的2MSL?
主动发送fin关闭的一方,在4次挥手最后一次要等待一段时间我们称这段时间为2MSL
TIME_WAIT状态的存在有两个理由:
- 让4次挥手关闭流程更加可靠
- 防止丢包后对后续新建的正常连接的传输造成破坏
4.为什么客户端在TIME-WAIT状态必须等待2MSL的时间?
-
为了保证客户端发送的最后一个ACK报文段能够达到服务器。 这个ACK报文段可能丢失,
因而使处在LAST-ACK状态的服务器收不到确认。服务器会超时重传FIN+ACK报文段,客户端就
能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重启计时器。
最好,客户端和服务器都正常进入到CLOSED状态。如果客户端在TIME-WAIT状态不等待一段时间,
而是再发送完ACK报文后立即释放连接,那么就无法收到服务器重传的FIN+ACK报文段,因而也
不会再发送一次确认报文。这样,服务器就无法按照正常步骤进入CLOSED状态。 -
防止已失效的连接请求报文段出现在本连接中。客户端在发送完最后一个ACK确认报文段
后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样
就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
5.TCP的重发机制
没有收到应答 对方会重发