网络体系结构
计算机网络是一个非常复杂的系统。设想一个最简单的情况:连接在网络上的两台计算机要互相传送文件:
- 两台计算机之间必须有一条传送数据的通路
- 发起通信的计算机必须将数据通信的通路激活。所谓激活是指发出一些信令,保证要传送的计算机数据能在这条通路上正确发送和接收;
- 要告诉网络如何识别接收数据的计算机;
- 发起通信的计算机必须查明对方计算机是否工作,网络链接是否正常;
- 发起通信的计算机中的应用程序必须知道对方计算机中的文件管理程序是否已做好接收文件和存储文件的准备工作;
- 对出现的各种差错和意外事故,如数据传送错误、重复或丢失,应当有可靠的措施保证对方计算机最终能受到正确的文件
由此可见,相互通信的两个计算机系统必须高度协调工作,这种协调十分复杂。为了设计这样复杂的计算机网络,引出了计算机网络体系结构—-将复杂的网络系统划分层次。
再举个例子:两个人写信。
浏览器要给服务器写信:
- 要让邮递员知道谁是收件人,就要双方做约定,达成一定的协议—-Http协议
- 浏览器要考虑传输的过程,浏览器不管信是否被接收,送出去就完事—-UDP协议:无连接,尽最大努力交付;还是一直等,如果信丢了再写一封—-TCP协议:面向链接,全双工通信可靠交付。
- 下面邮递员需要找服务器的地址:IP协议
- 之后邮递员需要规划最佳的路线:路由选择
- 之后邮递员选择传递的工具和方式:物理层协议
1:收件人(收件码)
2:价保服务or无服务
3:收件人地址
4:邮寄路线
5:邮寄方式
6:配送方式
7:配送路线
8:收件人地址
9:上门配送
10:确认收件码
TCP三次握手
三次握手主要的目的是为了确认两台主机都具备通信能力。
序号:
- seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
- 确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
- 序列号跟着自己走,第三次握手客户端序列号为自身第一次握手加一;确认跟着对方走序列号走,加一。
标志位:
- 同步SYN:建立连接时用来同步序号
- 确认ACK:仅当ACK=1时确认号字段才有效
第一次握手:客户端请求建立连接(SYN=1),seq=250
第二次握手:服务端请求建立连接(SYN=1),确认标志位(ACK=1),seq=666,ack=251
第三次握手:客户端确认报文段发出,确认标志位(ACK=1),seq=251,ack=667
第一次握手让B主机知道A可以发出
消息。
第二次握手让A知道了B能接收
到,也能发出
。
第三次握手让B知道了A能接收
到。
TCP四次挥手
第一次挥手:A告诉B数据发送完了。
第二次挥手:B知道A发完了,但是正在处理接收。
第三次挥手:B告诉A接收完了。
第四次挥手:A知道B接收完了。
同源策略
同源策略在web应用的安全模型中是一个重要概念。在这个策略下,web浏览器允许第一个页面的脚本访问第二个页面里的数据,但是也只有在两个页面有相同的源时。源是由URI,主机名,端口号组合而成的。这个策略可以阻止一个页面上的恶意脚本通过页面的DOM对象获得访问另一个页面上敏感信息的权限。
一句话解释同源就是:相同协议,相同域名,相同端口称为同源。子域不同不算同源。
这时邓哥就相当于是浏览器,一个url我们可以分为几个部分,比如http://pan.baidu.com:80
。绿茶妹妹就像是一个服务程序,绿茶妹妹姓欧阳,欧阳是姓,就相当于url中的主域(baidu.com)
,绿茶是名,就像是上面url中的子域(pan)
,一个主机可以有很多端口,就相当于是很多科目的作业,数学作业英语作业之类的,由于一般的服务都占用的是默认的80端口,所以我们一般情况下是看不到端口号的。
绿茶妹妹还有个亲妹妹,叫红茶妹妹(欧阳红茶)~
红茶妹妹和绿茶妹妹是一家的~所以肯定都姓欧阳,只是名字不同,就像是pan.baidu.com(百度网盘)和zhidao.baidu.com(百度知道)的关系。
这天红茶妹妹也没写完作业,也想抄绿茶妹妹的作业,因为作业在邓哥这里,所以来向邓哥来借绿茶妹妹的作业。但是邓哥不敢把作业借给别人,所以邓哥没有借给红茶妹妹。
虽然红茶妹妹和绿茶妹妹都姓欧阳,但是毕竟不是同一个人,这就像是pan.baidu.com和zhidao.baidu.com虽然都是百度旗下的,但是浏览器并不会直接允许zhidao.baidu.com访问pan.baidu.com的内容。这就说明子域不同不算同源。