网络模型与TCP协议
什么是web
Web浏览器从Web服务器端获取文件资源等信息,从而显示出Web页面。Web使用一种名为HTTP的协议作为规范,完成从客户端到服务器端等等一些列的运作流程。
客户端不一定代表浏览器,但浏览器一定是客户端。
http版本:http1.0,主流:http1.1,http2.0
URI与URL的区别:
URL:统一资源定位符
URI:统一资源标识符
URI用字符串标识某一互联网的资源,而URL表示资源的地点。URL是URI的子集。
表示指定的URI,要使用涵盖全部必要信息的绝对URI,绝对以及相对的URL。相对URL是指从浏览器中基本的URI处指定的URL。刑如:/image/logo.gif
绝对URI的格式:
绝对URI格式.jpg
URL 如何编码解码?为什么要编码?
URL只能使用ASCII字符集通过因特网进行发送,也就是说URL中只能包含英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,这就意味着如果URL中包含汉字就必须编码后使用。麻烦的是,RFC 1738没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。这导致了"URL编码"成为了一个混乱的领域。
解决办法:使用一些具体的方式进行编码。
- 两种编码方式
-- encodeURI()
-- encodeURIComponent() - 两种编码方式
-- decodeURI()
-- decodeURIComponent()
区别
encodeURI方法不会对下列字符编码
1\. ASCII字母
2\. 数字
3\. ~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码
1\. ASCII字母
2\. 数字
3\. ~!*()'
所以encodeURIComponent比encodeURI编码的范围更大。
实际例子来说,encodeURIComponent会把 http://
编码成 http%3A%2F%2F
而encodeURI却不会。
如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。 encodeURI("http://blog.jirengu.com/?cat=11&a=饥人谷"); //"http://blog.jirengu.com/?cat=11&a=%25E9%25A5%25A5%25E4%25BA%25BA%25E8%25B0%25B7"
其中,汉字被编码。但是如果你用了encodeURIComponent,那么结果变为
"http%3A%2F%2Fblog.jirengu.com%2F%3Fcat%3D11%26a%3D%25E9%25A5%25A5%25E4%25BA%25BA%25E8%25B0%25B7
OSI的7层模型是什么
开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),由国际标准化组织于1984年提出。
- 应用层
应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:** HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3**等。 - 表示层
表达层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式。 - 会话层
会话层(Session Layer)负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。 - 传输层
传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:TCP、UDP等。 - 网络层
网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络数据。例如:互联网协议(IP)等。 - 数据链路层
数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。 - 物理层
物理层(Physical Layer)在局部局域网上传送数据帧(data frame),它负责管理计算机通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等。
TCP/IP4层模型是什么
- 应用层:
应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层,这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送。然后被编码成标准协议的格式,每一个应用层协议一般都是使用到传输层协议TCP和UDP协议之一。
运行在TCP协议上的协议:
- HTTP(80端口):主要用于普通浏览。
- HTTPS(443端口):HTTP协议的安全版本。
- FTP(20和21端口):由名知义,用于文件传输。
- OPO3(110端口):收邮件用。
- SMTP(25端口):用来发送电子邮件。
- SSH(22端口):用于加密安全登录用。
运行在UDP协议上的协议: - DHCP(67端口,动态主机配置协议):动态配置IP地址。
其他协议: - DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。
- SNMP(Simple Network Management Protocol,简单网络管理协议),用于网络信息的手机和网络管理。
- ARP(Addredd Resoultion Protocol,地址解析协议):用于动态解析以太网硬件地址。
- 传输层:
解决诸如端到端的可靠性(数据是否已经达到目的地?)和保证数据按照正确的顺序到大这样的问题。TCP和UDP都是传输层协议。 - 网络层:
解决单一网络上的传输数据包的问题,IP协议是网络层协议。 - 数据链路层:
它是数据包从一个设备的网络层传输到另一个设备的网络层的方法。这个过程能够在网卡的软件驱动程序中控制或者专用芯片中控制。这将完成诸如添加报头准备发送、通过实体介质实际发送这样一些数据链路功能。另一端,链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。包括操作系统、硬件的设备驱动、NIC(网络适配器,网卡)、光纤等物理可见部分。
理解应用层协议是什么
http协议:具有一种规定的协议,HTTP协议的职责:作为客户端职责是:生成针对目标Web服务器的HTTP请求报文;作为服务器端的职责是:对Web服务器的请求内容进行处理。
理解传输层协议是什么
TCP协议位于传输层,提供可靠的字节流服务。
字节流服务:为了传输方便,将大块数据分割成以报文段为单位的数据包进行管理。
可靠的传输服务:能够把数据准确可靠的传给对方。
如何理解TCP/IP四层模型
利用TCP/IP协议族进行网路通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端从链路层往上走。
以HTTP举例:发送端的客户端在应用层发出想看某个Web页面的HTTP请求报文,接着,在传输层(TCP协议)把接收到的HTTP请求报文进行分割,并且在各个报文山打上标记序号及端口号传输给网络层。网络层(IP协议)增加作为通信目的地的MAC地址后转发给数据链路层。接收端从数据链路层接收到数据,按层序向上发送,一直到应用层,真正接收到客户端发来的HTTP请求。
在通过四层模型发送数据和接受数据的时候,会对数据进行封装。
理解TCP协议的三步握手流程
用三次握手建立TCP连接
TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的、可靠的、基于字节流的传输通信协议,与之对应的是UDP协议(User Dtagram Protocol,用户数据协议),是不可靠的传输层协议。
用三次握手建立TCP连接.PNG
- 客户端发送SYN报文给服务器端,序列号是n,进入SYN_SEND状态。
- 服务器端收到SYN报文,回应一个ACK(序列号是n+1)同时发送一个SYN(序列号是m),进入SYN_RECV状态。
- 客户端收到服务器端的SYN报文,回应一个ACK(序列号是m+1)报文,进入Estabished状态。
中间任何一个地方出现错误,就不能建立三次握手。若是出现中断,TCP协议会再次以相同的顺序发送相同的数据包。SYN请求报文,ACK回应报文。
理解TCP协议的四步挥手流程
用四次挥手释放TCP连接。
用四次挥手释放TCP连接.PNG
服务器终止数据传输需要一定的时间。
- 客户端发送一个FIN,告诉浏览器想关闭链接。
- 服务器收到这个FIN,返回一个ACK。
- 服务器通知应用程序关闭网络连接,应用程序关闭后通知服务器,服务器发送一个FIN给客户端。
- 客户端发回ACK报文确认。
FIN = 1表示想要关闭应用程序。
ACK = 1表示响应请求。
为什么挥手要四次
这是因为服务端的LISTEN状态下的SOCKET当收到客户端建立连接的请求的SYN报文后,它可以把ACK和SYN放在一个报文里来发送,但是关闭连接时,当服务器收到客户端的FIN报文通知后,服务器只能发一个回应报文ACK,然后通知应用程序,应用程序完成全部数据并确定可以终止了,服务器才能发送FIN告诉客户端可以真正断开连接了。所以这一步ACK报文和FIN报文需要分开发送,因此多了一个步骤。