web服务器原理(二)

Socket通信解析

  上一篇中我将Socket比作一个快递员,这一篇还是以这个比喻开始。你要寄快递,首先要表明自己的身份,将你打包好的物品交给快递员,然后告诉快递员你要送达的地点和人,快递员就选择合适的方式将包裹送过去,Socket的工作基本上就是这个流程。以浏览器发给服务器为例,首先浏览器需要表明自己身份,指出服务器的身份,然后将数据给Socket发送出去,Socket就选择合适的方式将数据传递到服务器。这个过程涉及到两个方面的问题:

  1.身份怎么确定?

  2.Socket要怎么传递数据?

  一、确认程序身份

  现实中,寄件人和收件人的信息是通过地址和姓名的方式表现出来的,首先通过地址限制范围,比如到某小区某栋楼或者某个房间,然后在这个范围内寻找叫这个名字的人,就能找到正确的人。同样的,在web中,我们也使用了相同的方式来表明一个浏览器/服务器的身份。首先,每一台能够联网的机器都需要有一个ip地址,这个ip在整个网络环境都是独一无二的(暂不考虑子网等情况),于是根据这个ip就能找到具体的机器。但是一台机器上面并不只有一个服务器程序,就像一间房里住了很多人,要找到具体的程序还需要一个名字,这个名字就是端口号。每个程序如果要访问网络都需要向操作系统申请一个端口号,这个号不能和其他程序相同,通过这个端口号,Socket在找到了机器之后就能正确的找到服务器程序。于是,浏览器和服务器的身份就可以用ip+端口的形式表示,如192.168.0.1:80。

  这里有一个问题,平时在浏览器中根本没有看到端口号,那这个端口号是怎么来的。首先,浏览器有一个规定,如果不添加端口号将使用协议的默认端口。那么协议的默认端口是什么呢?HTTP的默认端口号为80,HTTPS的默认端口号为443,FTP的默认端口号为21。这些都不重要,我们只需要知道浏览器会根据协议添加默认的端口号就行。现在有了新的问题,大部分的网址都没有端口号,也就是都是用了默认的端口号,那如果一台机器上有多个web服务器程序,应该怎么去区分他们呢?有一种实现方式是这样的:使用一个程序标记为80端口,这意味着它会接收所有默认端口的通信请求。然后它根据请求进行判断分类,将不同类别的请求传递给不同的服务器程序。这种程序一般叫做代理服务器,比如nginx。

  现在寄件人和收件人的身份都确定了,接下来是将打包好的包裹给快递员,这个过程属于协议的内容,暂时略过,假设已经打包好,下一步就是送包裹了,也就是传递数据。

  二、传递数据

  对于快递员,有多种方式可以运输快递。距离远的使用火车、飞机,距离近的使用汽车。对于Socket,距离并不是问题,因为网络传播速度都是一样的,那么什么才是问题呢?对于快递员来说,他应该保证及时、完整的送达包裹,对于Socket也一样。之前提到过TCP/IP协议的五层网络协议,其中的传输层就是为应用层提供数据传输服务的。对于TCP/IP协议来说,有两种服务可用。一种叫做TCP,一种叫做UDP。TCP的目的就是保证完整的送达包裹,但是有可能需要花费更多的资源去保证完整性;UDP的目的就是简单的发送,去保证及时性,但是有可能会造成数据的丢失。对于web来说,保证完整性是最重要的,谁也不想转账的时候突然少了一个0。因此,web的Socket都是用TCP作为传输协议,来保证数据的完整性。为了了解使用TCP会对web造成什么影响,我们必须先了解TCP的特点。

  TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议

  定义中有三个关键词:面向连接、可靠、基于字节流,这三个词语就包含了TCP的关键特性。首先,面向连接是指在TCP传递数据之前,首先要确保连接的两端能正常通信,并且互相交换一些信息进行初始化,之后TCP的两端会维护一个状态,让两端每次通信都保留记录,就像一直通信着一样;可靠,这个不用说,就是通过一系列方式比如重传啊、设置序号啊保证传递的数据和接收到的数据一致;基于字节流则是让接收的方式可以和发送的不相同。

  了解了TCP的特点后,我们就知道在web中,数据是不会丢失的,要么收不到数据,要么收到完整的数据。因此,Socket将数据交给TCP以后,它的任务就完成了。

  

  在保证数据能够正常到达后,下一篇我们要研究浏览器和服务器是怎么互相理解的,也就是HTTP协议的内容。

转载于:https://www.cnblogs.com/juggernautyy/p/6874369.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值