一、osi七层协议
1、原因
简化网络复杂度,每一层职责清晰,只和相邻层打交道。
2、对应tcp|ip
3、层次分析
1)中继器是在OSI模型的第一层–物理层上延长网络的设备。由电缆传过来的电信号或光信号经由中继器的波形调整和放大再传给另一个电缆
2)网桥工作在OSI参考模型的数据链路层(第二层),将两个局域网LAN连起来,根据MAC地址来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)。
3)路由器工作在OSI模型第3层–网络层。负责连接两个网络、并对分组报文进行转发的设备。
4)负载均衡器,就是4~7层交换机的一种。 宽带控制,也是4~7层交换机的重要功能之一。
4~7层交换机的应用场景还有很多。例如广域网加速器、特殊应用访问加速以及防火墙(可以防止互联网上的非法访问)等。
4、数据传输
5、一次请求
1)客户端-dns-udp-apr-.略.-路由器(本身是一个三层交换机,在自身内解析)-光猫-运营商-dns服务器-原路返回给客户端ip地址
2)客户端拿到ip再按上述步骤请求到路由器-运营商-路由器-服务端-服务端处理http请求返回响应给客户端
二、http
Http Header里的Content-Type一般有这三种:
1)application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。
2)multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
3)text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。postman软件里标的是RAW。
form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串追加到url后面,用?分割,加载这个新的url。
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。
当action为post且Content-Type类型是multipart/form-data,浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
三、tcp
ssh用xshell链接linux时,用的就是tcp协议
1、特点
1)TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
2)TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
3)TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
4)TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
5)TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
6)TCP面向的是字节流的服务,UDP面向的是报文的服务。
2、结构
http协议数据在data里
3、握手
s代表sync .代表ack
4、服务端处理
内核状态转换,应用程序accept后就可以进行通信
5、挥手
客户端和服务端都可以发起挥手
【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
1)确保最后一个确认报文能够到达(如果B没收到A发送来的确认报文,那么就会重新发送连接释放请求报文,A等待一段时间就是为了处理这种情况的发生)
2)避免新旧链接混淆。(等待2MSL可以让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接请求不会出现旧的连接请求报文)
6、可靠性
1)tcp基于字节流要对报文进行拆分,拆分后利用序列号保证有序性、和去重。
7、滑动窗口
1)背景
发送和返回ack都有可能丢失,每次等待重复,效率很低
滑动窗口与累计确认(http的发展)
2)滑动窗口不同的协议算法
3)作用
不可靠链路上可靠地传输帧
保持帧的传输顺序
支持流量控制
四、https
1、在http和tcp层之间加了SSL
2、TLS通信过程
服务端的公钥公开,私钥保留。能保证客户端到服务端这一次非对称加密安全。
1)三次握手
2)client将支持的加密算法发给server
3)server选择一个算法,以及公钥数字证书(包含ca、公钥、数字签名等,可信机构颁发)
4)client验证证书(通过公钥和数字签名解密,比对摘要验证),使用非对称加密如rsa.将对称算法的密钥传给服务端。
5)server私钥解密获取对称密钥
之后就可以用对称密钥加密双向传输。
比喻:抗战时两地通信。A将密码本(对称密钥)放在盒子里,上锁(公钥)
B拿到后用钥匙(私钥)将密码本拿出,以后就能用密码本加密通信
五、socket
Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。
1 、解释
Socket非常类似于电话插座。以一个国家级电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于Socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个Socket;同时要知道对方的号码,相当于对方有一个固定的Socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。假如对方在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向Socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭Socket,撤消连接。
在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,这也与Socket机制非常相似。Socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。
六、参考
https://www.cnblogs.com/linhaifeng/articles/5937962.html#_label18
https://www.bilibili.com/video/BV1Qt4y1C7XK?p=5