网络

一、Http和Https

Http

概念:超文本传输协议,请求与响应模式,基于TCP/IP的传输数据协议,位于应用层。

特点:1.无状态(协议对客户端没有状态存储,对事物没有记忆能力,例如多次访问某个网站需要进行多次登录)2.无连接(1.1以前每次请求都需要重新建立连接,1.1以后可以使用长连接保持连接状态,也可以使用Cookie/Session技术来解决)3.请求与响应模式。4.简单、快速、灵活。5.通信使用明文,不验证通信方的身份,无法保证数据的完整性和可靠性

Https

概念:在Http的基础上增加了SSL/TLS传输加密协议。

特点:使用SSL/TLS加密数据(非对称加密——公钥加密私钥解密和对称加密——使用一个密钥加解密同时使用);验证通信方的身份;保证数据的完整性

缺点:建立连接和页面加载时间增加;占用服务器端资源多;SSL证书需要购买,增加成本;

实现原理:1、客户端向服务器发送请求。2、服务器将自己的数字证书发送给客户端,数字证书包括证书颁发机构,过期时间,服务器公钥等信息。3、客户端验证证书,产生对称密钥;使用服务器公钥加密对称密钥,发送给服务器。4、服务器使用自己的私钥解密拿到对称密钥。5、他们之间就可以使用对称密钥加密信息进行通信了。

TCP三次握手建立连接

过程

1、客户端向服务器发送建立连接请求SYN=1 seq=x ,客户端进入SYN_SENT状态。

2、服务器回复客户端可以建立连接SYN=1 ACK=1 seq=y ack=x+1,服务端进入SYN_RECV状态。

3、客户端向服务器发送确认,表示将要进行数据传输,连接成功建立ACK=1 seq=x+1 ack=y+1,双方进入ESTABLISHED状态。

符号说明:SYN=1表示要建立连接请求,连接建立后被置为0。ACK=1表示确认收到消息,为0无效。seq表示当前数据包的序列号。ack表示下一个要接受数据包的序列号。

为什么不是两次握手而是三次呢?在两次情况下,要是服务器的回复客户端收不到,这时服务器端认为连接已经建立了,同时为客户端分配了资源,可是客户端会认为连接建立失败,此时资源就浪费了。

TCP四次挥手释放连接

过程

1、客户端表示要断开连接,FIN=1 seq=v,客户端进入FIN_WAIT_1状态。

2、服务器回复ACK=1 seq=u ack=v+1,服务端进入CLOSE_WAIT状态,客户端收到消息后进入FIN_WAIT_2状态。此时客户端不再发送数据,而服务端还继续向客户端传输数据。

3、服务器表示要断开连接,FIN=1 ACK=1 seq=w ack=v+1,服务端进入LAST_ACK状态。

4、客户端回复ACK=1 seq=v+1 ack=w+1,客户端进入TIME_WAIT状态,服务端在收到消息后进入CLOSED状态,而客户端在等待2MSL(报文段发送和回复所需的时间)时间之后默认成功断开连接进入CLOSED状态。

为什么要四次挥手,因为TCP连接时双向的,两个方向都要关闭连接。

为什么建立连接是三次,释放连接是四次呢?

因为建立连接是连续进行的,可以通过SYN和ACK判断连接建立过程。而释放连接是双向的,当一方释放之后,另一方可能需要经过一段时间才释放,所以需要四次。

二、ISO模型和TCP/IP模型

ISO模型(七层)

应用层:网络操作系统和应用程序提供网络服务功能。

表示层:内码转换,压缩解压缩,加密解密,充当应用程序和网络之间的“翻译官”。

会话层:在网络中的两个节点之间建立和维持通信。

传输层:数据的大小控制,数据分割和编号,数据完整性和准确性校验,确保数据可靠地到达接收方。

网络层:负责数据包传输路径的选择。当接收方只能处理较小数据时,负责对数据包进行分段和重组。

数据链路层:将从网络层接收的数据分成物理层能够传输的大小的帧。帧是用来移动的结构包,包括原始数据,发送方和接收方的网络地址,纠错和控制信息。

物理层:数据传输的具体的物理实体。

TCP/IP模型(四层)

应用层:所有面向用户的应用程序的统称。这一层有许多实现应用功能的协议。如:HTTP协议(访问)、FTP协议(文件传输)、SMTP协议(电子邮件)、DNS协议(域名解析)、Telnet协议(远程登录)。

传输层:基于TCP或者UDP协议进行网络节点之间的数据传输。

网络层:定义了IP地址格式,负责在发送方和接收方之间建立虚拟路径。

链路层:负责将从网络层接收的数据分成帧,通过物理链路传输;从物理链路中接收帧,抽取数据提交给网络层。

TCP和UDP的区别

可靠                    不可靠

连接                    无连接

面向字节流,将数据看成一串无结构的字节流        面向报文,不拆分,保留报文边界

一对一                一对一,多对一,多对多

慢                       快

耗系统资源多    耗系统资源少

三、Socket

概念:套接字,定义在应用层和传输层之间的一组接口。它使得传输层的协议对应用层隐藏,应用层可以通过调用接口进行数据传输。是一种网络间进程通信的方式(IP地址+协议+端口号可唯一确认一个应用程序)。

TCP Socket过程

服务器端

1、服务器建立ServerSocket对象(创建socket,绑定到端口,监听端口)。

2、服务器阻塞,等待客户端连接(Accept阻塞)。

3、连接建立,通过输入流读取客户端数据,输出流给客户端传数据。

4、关闭连接。

客户端

1、客户端建立Socket对象(指定服务器IP地址,端口号)。

2、connect连接建立。

3、通过输出流发送数据,输入流接收回复。

4、关闭连接。

UDP Socket过程

不必特意区分服务端还是客户端

发送方

1、创建DatagramPacket对象用于打包数据(参数是数据,数据长度,接收方IP地址,端口号)。2、创建DatagramSocket对象用于发送数据socket.send。

接收方

1、创建DatagramPacket对象用于解析数据包。

2、创建DatagramSocket对象用于接收数据包(可指定接收的端口号)socket.receive,放到DatagramPacket对象中。

四、DNS

解析过程

1、浏览器中输入域名,浏览器检查自己的缓存中是否存在记录。

2、浏览器缓存中没有,系统到本机的hosts文件中查找。

3、hosts文件中没有,系统到本机配的DNS解析服务器(LocalDNS)中查找。

4、LocalDNS中没有,LocalDNS代替系统查找,LocalDNS到根域名服务器请求解析。

5、根域名服务器会给LocalDNS一个地址,让它去主域名服务器中查找。

6、在主域名服务器中找到对应域名空间的Name Server服务器地址,LocalDNS再去Name Server服务器中请求解析。

7、Name Server服务器返回解析的IP地址和对应TTL(Time To Live)值,LocalDNS将结果储存并传给用户,解析完毕。

解析过程中的两种查询方式

递归查询:系统去LocalDNS中查询无果,然后转由LocalDNS代替系统去根域名服务器查询,这是递归查询。(帮人帮到底)

迭代查询:LocalDNS请求根域名服务器,根域名服务器返回主服务器地址,让LocalDNS去主服务器解析,这是一种迭代查询(甩锅)

五、get和post的区别

1、get将参数直接加在url上不安全,而post在请求体中。

2、get的参数大小有限制,post没有。

3、get参数只能用ASCII编码,而post没有要求。

4、get的参数会被保留在浏览器的历史记录中,而post不会。

5、get请求的回退是无害的,而post会再次发起请求。

6、get请求会被浏览器主动cache,而post不会。

7、get请求的url地址可以被Bookmark,而post不行。

但是从本质上来说,get和post都是基于tcp协议实现的,所以二者本质上没有区别,你可以在get的请求中也加上request body,也可以在post请求的url上加上参数。不过由于http的规定和不同浏览器的限制,使得偷偷夹带的参数不一定能被解析接收。

还有一个最重要的区别是,get请求只会发送一个tcp数据包便把header和data都发出去,服务器响应200(ok);而post会发送两个数据包,先将header发出去,收到服务器响应100(continue),再把data发出去,收到服务器响应200(ok)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 1.TCP报头格式 UDP报头格式 TCP报头格式 UDP报头格式 具体的各部分解释看 TCP报文格式详解 - ...
    杰伦哎呦哎呦阅读 2,392评论 0 5
  • 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。 按照计算机网络的定义,通过一定...
    蛋炒饭_By阅读 1,203评论 0 10
  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,464评论 0 6
  • github 创建分支 并在其他终端拉取 不难但是想记录下。下次可以直接过来看。指令如下: 经过以上指令在远程仓库...
    为了战战阅读 607评论 0 0
  • 银行股暴涨。小银行股涨幅靠前,成都银行一度涨停,大型的国有银行涨幅不大。我的交通银行涨幅最高有三个多点,...
    一本经典的书阅读 257评论 0 0