博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
同源协议以及网络连接的“三次握手”与“四次挥手”
阅读量:6072 次
发布时间:2019-06-20

本文共 2705 字,大约阅读时间需要 9 分钟。

浏览器同源是指协议,域名端口号都相同,不同的客户端脚本在没有授权的情况下是不能互相访问的。

资源定位器 url: 协议://域名(端口号,参数,查询等)

域名如 www.baidu.com 是倒着解析的:

 .com顶级域名  

baidu.com是一级域名

zhidao.baidu.com 属于二级域名

www是一级域名前缀,表示万维网维护的(www是子域,其他的子域如email,ftp等,由于最初的技术比较低级,所以每一个子域后面都对应一个服务器以判断所访问的是哪一种类型的网站,通过子域来判断访问的具体是哪一种服务器,现已合并,浏览器会自动根据用户输入的内容进行相对应的访问)

www.baidu.com属于特殊的二级域名

zhidao.baidu.com属于百度自身维护的网络网址 

com,org,net属于顶级域名,cn表示在中国地区

.com:商业机构     .net:从事互联网服务的机构    .org:非盈利性质的机构

.com.cn:国内商业机构    .net.cn:国内互联网服务机构   .org.cn:国内非营利性组织

当在浏览器里输入一个url后,具体发生了哪些事情呢?

首先,浏览器通过DNS域名解析到服务器的IP地址,然后客户端(即浏览器)通过TCP协议建立到服务器的TCP链接(三次握手),客户端向web服务端发送HTTP协议包,请求服务器里的资源文档,然后服务器向客户端发送HTTP应答包,最后客户端和服务器断开连接(四次挥手),客户端开始解析处理html文档。

我们在浏览器里输入的地址类比来说就像一个模糊的信息,他是需要被解析成一个具体的IP地址,才能被浏览器精确的访问到(例如:打开cmd,出入Ping www.baidu.com 就可以得到百度的IP地址)

TCP/UDP

TCP是基于连接的协议,是面向字节流的全双工通信,在正式收发数据前必须要和对方建立可靠的连接才能交换数据,一个TCP必须要通过三次“对话”才能建立起来。UDP是面向非连接的协议,即正式通信前不必与对方建立链接。就像发短信一样,不管对面的状态直接将数据包发送给对方。相对来说UDP很不安全。

三次握手

首先客户端向服务端发送链接,请求报文,服务端回复客户端ACK报文,并为这次链接分配资源,然后客户端再将ACK报文发送给服务端,并分配资源,建立连接。不得不说,这句话貌似和没说没什么两样。。。。。、

其实通俗来讲就是:

第一次client->server    server可以确认client的发信机和自己的收信机是完好的。

第二次client<-server    client受到回应后可以确认自己的收信机是完好的,以及server的收发信机是完好的,但此时server并不知道client是否受到了自己的回应,也不知道client收信机是否完好。

第三次client->server    client向server汇报自己的收信机完好,且已接收到了上一步server的回应,此时链接建立完成。client不必等待server回应。第三次 ACK 丢了没有太大问题。只要b后面接收到a的数据包过来,就可以确认连接已建好。如果a不发送别的数据包,那么b会超时重传第二次的握手信息。

举个例子,假如网络请求只有两次握手的话,在第二次client<-server时,如果client没有接收到server的回应的话,那么client就会认为链接失败,而server则认为连接成功,这就是一个悖论,而且,client认为连接失败要继续请求链接的时候,server却一直在等client的数据请求包,这样一方不断发送请求链接信息,为另一方在等待数据请求信息而非连接信息却在接收着连接请求信息,这样会使server十分困惑,倘若有大量的连接请求则会使server直接崩溃。

四次挥手

四次挥手是client与server断开连接的服务

第一次 client发送中断请求的FIN报文

第二次 server接受到中断请求,立即发出一个ACK报文,回应client表示:我已接收到你的中断申请,但请你等一下,我再检查一下是否已经将所有的数据都已发送完毕。此时client处于等待中。

第三次  server检查完毕,发送FIN报文,通知client:已经将所有的数据传输完毕,可以断开连接。

第四次  client发送ACK报文通知server关闭连接,但是client害怕由于网络原因,server可能没有接收到关闭连接的请求,所以client会进入一个等待时间,以确认server不会再返还信息即已接收到断开连接的请求并已断开连接。这时成功断开连接。

应用层协议http,https

超文本传输协议http是互联网上最广泛的一种网络协议,https是以安全为目标的https通道即http的安全版。

简单说就是client和server对互相的数据识别能力并不好(二者语言并不同),所以需要一种规范的数据格式来方便双方进行识别。

http(请求报文,响应报文) 通过报文进行沟通

请求报文:请求行(GET,POST等 + 请求url + 协议版本(1.1版本多了Keep-Alive) ),,请求主体

响应报文:响应行(http报文协议及版本,及状态描述),响应头,响应主体(即我们请求回来的数据)

常用状态码

  • 200 - 请求成功 ---- ok
  • 301 - 资源(网页等)被永久转移到其它URL ---- moved permanently
  • 302 - 资源临时移动
  • 304 - 资源未被修改(通过比较ETag值)
  • 404 - 请求的资源(网页等)不存在 ---- not found
  • 500 - 内部服务器错误 ---- internal server error
  • 503 - 服务器超载或维护

请求方法:GET&POST

GET和POST方法简单来说有三个区别。第一,GET只能通过拼接url的方式传递数据,而POST则在请求体中传递数据;第二,GET比POST传递的数据少;第三,POST先对来说更安全。那么其实严谨来说http协议里并没有对GET明文规定必须要拼接url的方式来传递数据,而是基于浏览器的原因,如果不拼接url后面,浏览器发送不出去,同时,http协议里也没有限制GET和POST的长度(content-length),只是由于服务器自身的原因为了确保自身安全性,而限制的(假如有黑客在请求里添加几兆的数据,同时大量的发送请求,这样服务器就很容易崩溃)。

以上就是自己这部分的分享了,如有错误,还望指出,感谢赐教!!

转载地址:http://gsbgx.baihongyu.com/

你可能感兴趣的文章
linux命令之tail
查看>>
epoll的lt和et模式的实验
查看>>
Flux OOM实例
查看>>
手把手教你用Python库Keras做预测(附代码)
查看>>
Java学习笔记--内存划分 堆栈方法区
查看>>
vsftpd cmds_allowed权限控制参数手册
查看>>
RHCE7.0答案之修改网络配置
查看>>
Express使用手记:核心入门
查看>>
话里话外:IT规划与企业战略的最佳匹配
查看>>
我的友情链接
查看>>
debian下LAMP+nginx代理+awstats+nagios+cacti(三)
查看>>
MySQL级联复制(A->B->C)
查看>>
OSI七层与TCP/IP五层网络架构详解
查看>>
linux挂载NTFS分区
查看>>
Linux运维文档之nginx
查看>>
nagios安装脚本
查看>>
怎样理解阻塞非阻塞与同步异步的区别?
查看>>
Java并发编程实战(chapter_2)(对象发布、不变性、设计线程安全类)
查看>>
函数指针与指针函数的区别
查看>>
函数_实例4_使用位置参数和函数返回结果
查看>>