石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程

1、tcp/ip 网络四层模型

四层模型:数据链路层(以太网协议),网络层(ip协议),传输层(tcp协议),应用层(http协议)

应用层: 应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。

传输层: 在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。

互连网络层: 负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

网络接口层(主机-网络层): 接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第1张图片

*** 传输层的tcp协议,仅仅只是规定了一套基于端口的点对点的通信协议,包括如何建立连接,如何发送和读取消息,但是实际上如果医药基于tcp协议来开发,一般使用socket,java socket网络编程

OSI七层模型:就是搞一个标砖的网络模型出来,大家都按照这个来走,那么大家都有统一的规范。

            七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第2张图片

其中两个子网之间的通信,可以借助交换机进行

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第3张图片

数据链路层数据包 

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第4张图片

tcp三次握手

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第5张图片

通过传输层的tcp协议建立网络协议的时候,其实走的是三次握手的过程

建立三次握手的时候,tcp报头用到了下面几个东西,ACK、SYN、FIN

第一次握手: 客户端发送连接请求报文,此时 SYN=1、ACK=0,这就是说这是个连接请求,seq=x,接着客户端处于SYN_SENT 状态,等待服务器响应

第二次握手:服务端收到 SYN=1 的请求报文,需要返回一个确认报文,ack=x+1,SYN=1,ACK=1,seq=y,发送给客户端,自己处于SYN_RECV 状态

第三次握手:客户端收到了报文,将ack=y+1, ACK=1, seq=x+1

三次握手就是来回的三次请求,每次请求带上一堆TCP报文头,根据报文头是否正确,就是约定的协议来建立连接

tcp断开连接的4次挥手

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第6张图片

第一次挥手,客户端发送报文,FIN=1,seq=u,此时进入FIN-WAIT-1状态

第二次挥手,服务端收到报文,这时候进入 CLOSE_WAIT 状态,返回一个报文,ACK=1,ack=u+1,seq=v。客户端收到这个报文之后,直接进入 FIN-WAIT-2 状态,此时客户端到服务端的连接就释放了

第三次挥手,服务端发送连接释放报文,FIN=1,ack=u+1,seq=w,服务端进入 LAST-ACK 状态

第四次挥手,客户端收到连接释放报文之后,发送应答报文,ACK=1,ack=w+1, seq=u+1, 进入TIME_WAIT 状态,等待一会客户端进入CLOSED状态,服务端收到报文之后就进入CLOSED 状态

 

2、socket通信原理

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第7张图片

socket通信数据包

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第8张图片

3、浏览器请求过程

先经过DNS 获取访问地址的ip地址,然后会将这个http请求报文打包成一个数据包,仅仅只是数据包的数据部分,此时数据包是没有头的,上面根据http协议搞一个http请求报文,然后搞一个数据包出来,就是网络模型中的应用层干的事情了

接着就是跑到传输层了,这个层是tcp协议,这个tcp协议会让你设置端口,发送方的端口随机选一个,接收方的端口一般是默认的80端口,这个时候,会将应用层数据包给封装到tcp数据包中去,而且会加一个tcp头,这个tcp数据包是对应一个tcp头的,这个tcp头里就放了端口号信息。

接着是网络层,走ip协议,这个时候会把tcp头和tcp数据包,放到 ip 数据包里去,然后在搞一个ip头,ip头里本机和目标机器的ip地址,这里本机ip地址是192.168.31.37,目标机器是172.194.26.108

接着就是数据链路层了,这块走以太网协议,这里把ip头和ip数据包风道以太网数据包里去,然后再加一个以太网数据包的头,头里放了本机网卡 mac 地址,和网关的mac地址,但是以太网数据包的限制是1500个字节,但是假设这个时候ip数据包都5000个字节了,那么需要将ip数据包切割一下

这个时候一个以太网数据包要切割为4个数据包,每个数据包包含了以太网头、ip头和切割后的ip数据包,4个数据包的大小分别是1500,1500,1500,560。ip头里包含了每个数据包的序号

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第9张图片

www.baidu.com的完整的请求就是

石杉笔记(3) tcp/Ip模型、tcp三次握手、四次挥手、socket编程原理、访问www.baidu.com请求的全部过程_第10张图片

 

你可能感兴趣的:(面试)