1.TCP/IP简介
协议是指计算机之间通信的规范,TCP/IP协议共分为四层。
1.链路层:用来处理连接网络的硬件部分,如设备驱动,网卡。
2.网络层:用来处理在网络上流动的数据包,数据包是网络传输的最小单位,该层的作用就是选择传输路线把数据包传输给对方。
3.传输层:承载TCP/UDP协议。
4.应用层:承载FTP/DNS/HTTP协议。
2.访问网页过程
1.浏览http://index.com/hello
2.DNS解析index.com对应的ip地址是100.100.100.1
3.HTTP生成对目标Web服务器的请求报文
4.TCP将HTTP请求报文分割成多段传输
5.IP协议搜索对方的MAC地址并传送,中间可能经过多个路由器中转
6.TCP重组报文段
7.HTTP对请求的内容做处理
8.按原路回传
3.HTTP缺点&HTTPS
一、HTTP缺点
1.通信使用明文,不对数据进行加密(内容容易被窃听)
2.不验证通信方身份(容易伪装)
3.无法确定报文完整性(内容易被篡改)
HTTPS是HTTP+SSL,在使用HTTP时,HTTP直接与TCP通信,使用HTTPS后,HTTP先与SSL通信,再与TCP通信。
SSL加密方式:
1.共享秘钥加密(对称加密)
加密的同时把秘钥发送给对方。
2.公开秘钥加密(非对称加密)
接收方有两把秘钥,公开秘钥和私有秘钥,公开秘钥随意发送,私有秘钥只有自己有,发送方发送时使用对方的公开密钥进行加密发送,接收方接受到后使用私有秘钥解密。
3.混合加密机制
共享秘钥传输快,不安全,公开秘钥传输慢,安全。因此可以先按公开秘钥传通信,在确保安全后采用共享秘钥通信。
4.TCP协议特点和三次握手&四次挥手
TCP协议是一种面向连接的可靠的字节流服务。
在一个TCP连接中只有两方进行彼此通信,不能广播。
TCP使用校验和、确认和重传机制保证传输可靠性。
TCP对数据进行分段,使用累积确认保证数据包的顺序和非重复。
TCP使用滑动窗口机制实现流量控制,通过动态改变窗口大小进行拥塞控制。
三次握手是指建立TCP连接时,客户端和服务器总共发送三个包,在socket编程时,客户端执行connect()方法时出发三次握手。
(1)第一次握手:
Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:
Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:
Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
所谓四次挥手就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为在建立连接时,当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假想网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
本文深入解析TCP/IP协议的四层结构,探讨HTTP访问网页的过程,对比HTTP与HTTPS的优劣,详解SSL加密机制,包括共享密钥、公开密钥及混合加密方式。同时,阐述TCP协议的特点,如三次握手、四次挥手机制及其背后的原理。
38万+

被折叠的 条评论
为什么被折叠?



