OSI七层模型:物理层-数据链路层-网络层-运输层-会话层-表示层-应用层
OSI五层模型:5、应用层
各层协议:应用层负责两个进程之间的通信,协议有HTTP HTTPS FTP SMTP DNS 运输层负责两台主机之间的通信,有TCP UDP协议 网络层是选择合适的路由和交换节点,有IP协议以及很多路由选择协议 数据链路层传输数据帧,在两个相邻节点上传送帧。数据链路层收到一个帧后,提取出数据部分交给网络层。物理层是相邻计算节点间的流传输
三次握手
第一次是主机发送建立连接消息给服务器,服务器表示发现这个请求建立连接的消息,第二次是服务器发送我可以连接的消息给主机,第三次是主机发送正式确认连接给服务器。接下来就可以发送数据了。具体过程如下:
1、tcp服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态
2、TCP客户进程也是先创建TCB,然后向服务器发送连接请求报文,这时报文首部中的同步位SYN=1,同时选择一个初始序列号seq=x。此时,tcp客户端进程进入了SYN-SENT(同步已发送状态)状态,TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
3、TCP服务器收到请求后,如果同意连接,则发出确认报文。确认报文中应该ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但同样需要消耗一个序号。
3、TCP服务器收到请求后,如果同意连接,则发出确认报文。确认报文中应该ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但同样需要消耗一个序号。
4、TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
5、当服务器收到客户端确认后,也进入ESTABLISHD状态,此后双方开始通信。
传了SYN为啥还传ACK?
SYN验证发送方到接收方的通道,ACK验证接收方到发送方的通道
四次挥手
主机发送释放连接消息到服务器;服务器收到后进入半关闭状态,但是还继续接收客户端发来的数据包(防止网络拥塞之类的导致数据包发的慢??),服务器发送收到主机提出的释放连接的确认消息到主机;主机收到后也变为半关闭状态,对服务器后续发来的数据包依然会接受;服务器继续发送释放连接消息表示最后一个消息发完了,我要下线了;主机发送确认消息表示我知道了,拜拜。
这里,服务器收到主机的确认消息后立即下线,主机发送完需要等待一个最长数据包来回的时间(2SML时间),防止1、服务器没收到我的确认包,服务器如果没收到会再次发来释放连接消息。2、这个时间保证了端到端的链路上没有报文段了,担心收到的服务器发来的消息是一个失效连接。具体过程如下:https://www.cnblogs.com/cherry-BAIL/p/13413068.html
A: “我没啥要说的了”
B:“我知道了”
B:我说完了
A:好的
TCP与UDP的区别
面向连接的可靠的字节流传输 尽最大努力交付的数据报文传输
TCP用于文件传输,发送和接收邮件和远程登陆等场景
TCP如何保证可靠传输
含需要解析的URL。
本地DNS返回I
数据分割;数据包编号;校验和;接收端丢弃重复数据;流量控制;拥塞控制;ARQ协议;超时重传
在浏览器中输入url——直到显示主页的过程
https://www.cnblogs.com/davina123/p/12978114.htmlDNS解析-》IP路由寻址-》建立TCP连接-》发送http请求,服务器处理并返回结果-》关闭TCP通道-》客户端把获取的结果进行渲染
DNS解析
:https://blog.csdn.net/yipiankongbai/article/details/25031461主机向本地域名服务器发送UDP报文,包P地址,如果无法返回IP地址,则本地DNS向根DNS发送请求。
根DNS返回IP地址或者顶级DNS的地址给本地DNS。
本地DNS向顶级DNS发送请求,顶级返回IP地址或者权限DNS的IP地址。
IP路由寻址
:https://www.cnblogs.com/hnrainll/archive/2011/10/20/2218506.htmlICMP协议将IP地址封装为数据包,传递给IP协议。这个IP数据包的作用是当到达对方主机时,告诉主机这个数据包需要ICMP协议处理。IP协议会判断目的IP地址是属于远程网络,还是在本地网络。这里用到ARP协议将IP地址解析为MAC地址,路由器查找该MAC地址是否有特定的转发端口,否则就是默认网关。IP数据包打包成数据帧,进入数据链路层。这里的目的MAC地址不是目的主机距离源主机最近的默认网关的MAC地址。
到此,数据包封装完成。接下来是路由器选择协议。
数据链路层的路由器/交换机将数据帧中的IP数据包抽出来,向上层传递。路由器根据IP地址转发数据包到对方所在的网络中。到达后利用ARP协议找到MAC地址。
对方主机收到该数据帧,解析内容并发送回应消息。
状态码
1xx 信息性状态码 接收的请求正在处理
2xx 成功状态码 请求正常处理完毕
3xx 重定向状态码 需要进行附加操作以完成请求
4xx 客户端错误状态码 服务器无法处理请求
5xx 服务器错误状态码 服务器处理请求出错
Cookie与Session
Cookie主要保存用户信息,例如客户登录过一次网站,第二次登陆可以由Cookie自动填写用户名密码;
Session主要用来通过服务器端记录用户的状态,例如同一个网站的其它页面无需登录可以直接浏览
C保存在客户端,S保存在服务器端
http讲解
HTTPS建立连接具体过程
当客户在浏览器中输入网址的并且按下回车,浏览器会在浏览器DNS缓存,本地DNS缓存,和Hosts中寻找对应的记录,如果没有获取到则会请求DNS服务来获取对应的ip,获取到ip地址进行tcp三次握手建立连接。客户端发送客户端支持的ssl/tls加密协议版本,服务器端选择一个加密协议然后返回带公钥的证书;客户端验证证书的合法性,生成对称密钥并用公钥加密消息发送到服务器端;服务器端用私钥解密获取对称密钥,使用对称密钥加密数据;客户端解密数据然后开始ssl通信