连接的三次握手
客户端发送SYN信号,表示告诉服务器,我要建立连接
服务器返回ACK=1和SYN=1给客户端,表示我已经接收到了客户端的请求,并接收了请求。
客户端收到来自服务端响应后,知道服务端已经接受连接请求,再次发送ACK给服务器,确认服务端的SYN,其实也就是一个确认的再确认。
终止的四次挥手:客户端和服务端均可主动发起挥手操作终止连接
主动方A发送一个FIN(终止信号)给被动方B,表示要终结主动方A到被动方B的连接;
被动方B收到了FIN信号,返回ACK信号给主动方,表示从主动方到被动方的连接关闭了,也就是主动方不能再发送数据给被动方。
被动方B在发送完数据后,给主动方A发送一个FIN信号,请求要终结被动方B到主动方A的连接;
主动方A收到了FIN信号,返回ACK信号给被动方B,表示从被动方B到主动方A的连接关闭了,也就是被动方不能再发送数据给主动方。
1)TCP将数据截取为合理的长度:TCP将应用数据分割成认为最适合发送的数据块。UDP完全不同,在UDP中应用程序产生的数据报长度将保持不变。
2)TCP的超时重发机制:TCP发出数据流之后会等待接收方发出响应确认信号,如果发送方不能及时收到确认信号会重新再次发送数据报。
3)对于收到的请求,给出确认响应:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 。
4)TCP会校验数据报,如果检测出包有错,就丢弃报文段,不给出响应。
5)对失效数据进行重排序然后才交给应用层:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
6)对于重复数据,能够丢弃重复数据:既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
7)TCP还能提供流量控制,防止较快主机导致较慢主机的缓冲区溢出:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
TCP使用的流量控制协议是:可变大小的滑动窗口协议。
1)连接是三次的原因?
为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机 A 发出的连接请求没有收到主机 B 的确认,于是经过一段时间后,主机 A 又重新向主机 B 发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机 A 第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机 B ,主机 B 以为是主机 A 又发起的新连接,于是主机 B 同意连接,并向主机 A 发回确认,但是此时主机 A 根本不会理会,主机 B 就一直在等待主机 A 发送数据,导致主机 B 的资源浪费
2)断开是四次的原因?
这是由于TCP的半关闭造成的,由于TCP 是全双工的,表示可以同时在两个方向上即可以接收数据也可以发送数据。所以我们关闭连接必须在每个方向上面单独关闭,这个单方向的关闭就叫半关闭。所以挥手时其实就是2次断开连接,所以是四次。
1)TCP和UDP都是传输层的协议。
2)TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于一次传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。比如FTP、SMTP之类
3)UDP:面向非连接、传输不可靠、用于一次传输少量数据(数据包模式)、速度快。比如QQ。
应用层:负责处理特定的应用程序;
传输层:负责提供端到端的通信(不同应用程序到不同应用程序,这里限制了端口号,很容易理解,我们使用TCP时都是限定了IP+端口号的);
网络层(IP层):主要是路由选择与转发;
TCP/IP分为四层:应用层、传输层、网络层IP、网络接口层。
http属于应用层;
应用层:FTP、Http、WWW、SMTP等等
传输层:TCP、UDP;
网络层IP:IP、ARP、ICMP;
网络接口层。
传输层上面是应用层。
7. TCP/IP协议栈
(1)网络接口层
TCP/IP协议模型的基层,负责数据帧的发送和接收。对应OSI模型中的物理层和数据链路层,是TCP/IP的最底层,不过通常在描述TCP/IP模型时还是会划分具体为物理层(PHY)和数据链路层(MAC)。
(2)网络层
通过互联协议将数据包封装成互联网数据包,并运行必要的路由算法。这里有4种互联协议。
(a)网际协议IP:负责在主机和网络之间的路径寻址和数据包路由。
(b)地址解析协议ARP:获得同一物理网络中的主机硬件地址。
(c)网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。
(d)互联组管理协议IGMP:用来实现本地多路广播路由器报告。
(3)传输层:提供可靠端到端的传输(应用到应用)
传输协议在主机之间提供通信会话。传输协议的选择根据数据传输方式而定。主要有以下2种传输协议:
(a)传输控制协议TCP:为应用程序提供可靠的通信连接,适用于要求得到响应的应用程序。
(b)用户数据包协议UDP:提供无连接通信,且不对传输包进行可靠性确认。
(4)应用层
应用程序通过这一层访问网络,主要包括常见的FTP、HTTP、DNS和TELNET协议。
TCP/IP协议模型对数据的封装
一次HTTP操作称为一个事务,其工作整个过程如下:
1 ) 地址解析
如用客户端浏览器请求这个页面:http://localhost.com:8080/index.html
从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:localhost.com
端口:8080
对象路径:/index.htm
在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。
2)封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包。
3)封装成TCP包,建立TCP长连接(TCP的三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口
4)客户机发送请求命令
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
5)服务器响应
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
6)服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
1)get是从服务器上获取数据,post是向服务器传送数据。
2)get的参数键值对可以在URL中可以看到。Post是将表单内键值对放置在html的header中,用户看不到这些值。
3)get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
1)https协议需要申请证书,一般免费证书较少,因而需要一定费用。
2)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4)http的连接很简单且是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
Cookie和session都是保存回话的技术:
1)cookie保存在客户端,session保存在服务器端;
2)cookie可以跟踪会话,也可以保存用户喜好或者保存用户名密码;session用来跟踪会话。
3)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
4)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
5)这个地方可以扩展到分布式session服务器。
3xx:重定向
4xx:客户端/请求错误
5xx:服务器内部错误
http是无状态的会话,需要基于http协议支持会话状态的机制。这时候引入session,在会话开始时,分配一个唯一的会话标识(sessionId),通过cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器的cookie都会带上这个会话ID来告诉web服务器请求是属于哪个会话的。这也是为什么禁用了cookie之后,每次操作都需要先登录。在web服务器上各个会话有独立的存储,保存不同会话的信息。
对于上万个用于已经登录了,服务端是怎么分辨每个用户的?
① 服务器在响应头内加上”set-Cookie:XXXXXXXXXXXXX“(相当于一个唯一的ID符),此信息是服务器随机生成的,放在服务器内存里,不会重复,这就是sessionid。
②当浏览器得到这个sessionId会将它放在自己的进程内存里,.然后你继续发请求给这个网站的时候,浏览器就会把这个sessionId放在请求头里发送给该服务器了,这样服务器得到sessionId后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话。
③关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因为发送的请求中没有这个sessionid,而使服务器无法辨别请求身份。
(1)浏览器查询缓存,如果缓存存在跳到第11步;
(2)浏览器本地的host文件查看是否存在对应IP地址
(3)DNS域名解析,返回IP地址给浏览器
(4)浏览器打开对服务器的TCP连接
(5)浏览器通过TCP连接发送HTTP请求;
(6)CDN 缓存静态文件,是否存在,存在就直接返回;
(7)经过负载均衡服务器然后到达应用服务器(这里如果是面向服务的架构,可能存在服务调用);
(8)浏览器检查HTTP响应是否为一个重定向(3xx 结果状态码 ),一个验证请(401),错误(4xx 5xx)等等,这些都是不同响应的正常处理(2xx)
(9)如果响应可缓存,将存入缓存
(10)浏览器解码响应(例如:如果它是gziped压缩),浏览器决定如何处理这些响应(例如,它是HTML页面,一张图片,一段音乐)
(11)浏览器展现响应,对未知类型还会弹出下载对话框(现在一般不会弹出了,用户对浏览器设置而定)
note:这个题目其实是一个很好引导面试官的题目,在我们说完大致过程之后,我们可以选择自己熟悉地方引。比如
关于负载均衡,引导负载均衡的类型以及实现负载均衡的算法;
2)比如session定位问题,引出session绑定、session复制、session服务器集群;
3)比如关于缓存我们可以引出二八定律、一致性hash问题。
HTTP请求包括三部分:请求行(Request Line),头部(Headers)和实体内容(Body)。其中,请求行由请求方法(method),请求网址Request-URI和协议 (Protocol)构成,而消息头包括多个属性,实体内容(数据体)则可以被认为是附加在请求之后的文本或二进制文件,只有请求方式为post的时候,实体内容才会有数据(即请求参数)。
请求头和请求体之间用什么分割,当时回答是两个回车换行,后来查了一下原来是一个回车换行。
答案是不能,客户端接受消息是通过从服务器拉数据的形式来获取数据而不是服务器向客户端取数据。客户端几乎也是不会监听端口接受服务器发来的消息。
互联网的关键技术就是TCP/IP协议。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的。实际上这个是两个协议:
TCP : Transmission Control Protocol 传输控制协议和
IP: Internet Protocol 网际协议。
IP:计算机之间的通信(路由转发)
IP协议是计算机用来相互识别的通信的一种机制,每台计算机都有一个IP.用来在internet上标识这台计算机。 IP 负责在因特网上发送和接收数据包。通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。IP 负责将每个包路由至它的目的地。
IP协议仅仅是允许计算机相互发消息,但它并不检查消息是否以发送的次序到达而且没有损坏(只检查关键的头数据)。为了提供消息检验功能,直接在IP协议上设计了传输控制协议TCP.
TCP : 应用程序之间的通信(端到端通信)
TCP确保数据包以正确的次序到达,并且尝试确认数据包的内容没有改变。TCP在IP地址之上引端口(port),它允许计算机通过网络提供各种服务。一些端口号为不同的服务保留,而且这些端口号是众所周知。
服务或者守护进程:在提供服务的机器上,有程序监听特定端口上的通信流。例如大多数电子邮件通信流出现在端口25上,用于wwww的HTTP通信流出现在80端口上。
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信,占用两个计算机之间整个的通信线路。TCP 用于从应用程序到网络的数据传输控制。TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们到达的时候将它们重组。
TCP/IP 就是TCP 和 IP 两个协议在一起协同工作,有上下层次的关系。
TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者,传输过程要经IP路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址,然后在它们到达的时候重新组合它们。
专门的session服务器(redis或则memcache实现),这里就有session在分布式环境下的问题,最后引出一致性hash问题。
1)session变量保存在web服务器中,你不能直接修改,当然,调用程序中的setAttribute()方法当然可以了。cookie存储的不是具体的数据,要不岂不是太不安全了,谁都可以修改session变量了,网站也毫无安全性可言。实际,在cookie中,存储的是一个sessionId,它标示了一个服务器中的session变量,通过这种方式,服务器就知道你到底是那个session了。顺便说一句,如果客户端不支持cookie,session也是可以实现的,在服务器端通过urlEncoder,可以实现sessionId的传递。所以,记住客户端只存储session标识,实际内容在网页服务器中。
2)以键值对的方式存储的
http请求由三部分组成,分别是:请求行、消息报头、请求正文
HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
1)、常用的HTTP方法有哪些?
GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器。
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置。
HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
OPTIONS:查询相应URI支持的HTTP方法。
2)、GET方法与POST方法的区别
区别一:
get重点在从服务器上获取资源,post重点在向服务器发送数据;
区别二:
get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;
post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
区别三:
Get传输的数据量小,因为受URL长度限制,但效率较高;
Post可以传输大量数据,所以上传文件时只能用Post方式;
区别四:
get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;
post较get安全性较高;
区别五:
get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
post支持标准字符集,可以正确传递中文字符。
3)、HTTP请求报文与响应报文格式
请求报文包含三部分:
a、请求行:包含请求方法、URI、HTTP版本信息
b、请求首部字段
c、请求内容实体
响应报文包含三部分:
a、状态行:包含HTTP版本、状态码、状态码的原因短语
b、响应首部字段
c、响应内容实体
4)、常见的HTTP相应状态码
返回的状态
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙
505:服务器不支持此版本的http;
5)、HTTP的缺点与HTTPS
a、通信使用明文不加密,内容可能被窃听
b、不验证通信方身份,可能遭到伪装
c、无法验证报文完整性,可能被篡改
HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护
HTTP GET方法用于获取资源,不应有副作用,所以是幂等的。
比如:GET http://www.bank.com/account/123456,不会改变资源的状态,不论调用一次还是N次都没有副作用。请注意,这里强调的是一次和N次具有相同的副作用,而不是每次GET的结果相同。GET http://www.news.com/latest-news这个HTTP请求可能会每次得到不同的结果,但它本身并没有产生任何副作用,因而是满足幂等性的。
HTTP DELETE方法用于删除资源,有副作用,但它应该满足幂等性。
比如:DELETE http://www.forum.com/article/4231,调用一次和N次对系统产生的副作用是相同的,即删掉id为4231的帖子;因此,调用者可以多次调用或刷新页面而不必担心引起错误。
HTTP POST方法用于创建资源,所对应的URI并非创建的资源本身,而是去执行创建动作的操作者,有副作用,不满足幂等性。
比如:POST http://www.forum.com/articles的语义是在http://www.forum.com/articles下创建一篇帖子,HTTP响应中应包含帖子的创建状态以及帖子的URI。两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI;所以,POST方法不具备幂等性。
HTTP PUT方法用于创建或更新操作,所对应的URI是要创建或更新的资源本身,有副作用,它应该满足幂等性。(类DELETE)
比如:PUT http://www.forum/articles/4231的语义是创建或更新ID为4231的帖子。对同一URI进行多次PUT的副作用和一次PUT是相同的;因此,PUT方法具有幂等性。
首先了解一下TCP与UDP传送字节的长度限制:
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
1、MP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP是在IP数据报内部被传输的。
ICMP报文的前四个字节是统一的格式,共有三个字段:类型、代码、校验和。接着的四个字节的内容与ICMP类型有关。
2、MP报文的种类有两种:ICMP差错报告报文和ICMP询问报文。
ICMP差错报告报文共有五种,即:
终点不可达。
源点抑制。
时间超过。
参数问题。
改变路由。
ICMP询问报文有两种:
回请求回答。
时间戳请求回答。
3、ICMP的一个重要应用是ping命令,用来检测两个主机之间的连通性。Ping使用了ICMP回送请求与回送回答报文。Ping是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的tcp和udp。
ICMP的另一个重要应用是traceroute,用来跟踪一个分组从源点到终点的路径。
对网络中设备的管理。基于TCP/IP的网络管理包含两个部分:网络管理站和被管的网络单元。
SNMP的网络管理由三部分组成:SNMP本身、管理信息结构SMI、管理信息库MIB。由SMI建立规则,MIB对变量进行说明,而SNMP完成网管的动作。
SMI的功能应当有三个,即规定:
1、被管对象应该怎样命名;
2、用来存储被管对象的数据类型有哪几种;
3、在网络上传送的管理数据应该如何编码。
SNMP的操作只有两种基本的管理功能,即:
1、“读”操作,用Get报文来检测各被管对象的状况。
2、“写”操作,用Set报文来改变各被管对象的状况。
SNMP的这些功能通过探询操作来实现,即SNMP管理进程定时向被管理设备周期性的发送探询信息。SNMP使用无连接的UDP,因此在网络上传送SNMP报文的开销较小。但UDP是不保证可靠交付的。
管理主机名和IP地址之间的对应关系的系统。
域名解析过程要注意的:
1、主机向本地域名服务器的查询一般都是采用递归查询。所谓的递归查询就是:如果主机所查询的本地域名服务器不知道查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让主机自己进行下一步的查询。
2、本地域名服务器向根域名服务器的查询通常采用的是迭代查询。迭代查询是:当根域名服务器收到本地域名服务器发出的迭代查询请求时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当哪一个域名服务器进行查询。
DNS解析过程:
1.客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
2.当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
3.如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
4.本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
5.重复第四步,直到找到正确的纪录。
6.本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
把URL分割成几个部分:协议、网络地址、资源路径。其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括端口号;协议是从该计算机获取资源的方式,常见的是HTTP、FTP,不同协议有不同的通讯内容格式;资源路径指示从服务器上获取哪一项资源。
例如:http://www.guokr.com/question/554991/
协议部分:http
网络地址:www.guokr.com
资源路径:/question/554991/
如果地址不是一个IP地址,通过DNS(域名系统)将该地址解析成IP地址。IP地址对应着网络上一台计算机,DNS服务器本身也有IP,你的网络设置包含DNS服务器的IP。
例如:www.guokr.com 不是一个IP,向DNS询问请求 对应的IP,获得IP: 111.13.57.142。这个过程里,你的电脑直接询问的DNS服务器可能没有www.guokr.com 对应的IP,就会向它的上级服务器询问,上级服务器同样可能没有,就依此一层层向上找,最高可达根节点,找到或者全部找不到为止。
如果地址不包含端口号,根据协议的默认端口号确定一个。端口号之于计算机就像窗口号之于银行,一家银行有多个窗口,每个窗口都有个号码,不同窗口可以负责不同的服务。端口只是一个逻辑概念,和计算机硬件没有关系。
例如:www.guokr.com 不包含端口号,http协议默认端口号是80。如果你输入的url是http://www.guokr.com:8080/,那表示不使用默认的端口号,而使用指定的端口号8080。
向2和3确定的IP和端口号发起网络连接。
例如:向111.13.57.142的80端口发起连接
根据http协议要求,组织一个请求的数据包,里面包含大量请求信息,包括请求的资源路径、你的身份
例如:用自然语言来表达这个数据包,大概就是:请求 /question/554991/ ,我的身份是xxxxxxx。
服务器响应请求,将数据返回给浏览器。数据可能是根据HTML协议组织的网页,里面包含页面的布局、文字。数据也可能是图片、脚本程序等。现在你可以用浏览器的“查看源代码”功能,感受一下服务器返回的是什么东东。如果资源路径指示的资源不存在,服务器就会返回著名的404错误。
如果(6)返回的是一个页面,根据页面里一些外链的URL,例如图片的地址,按照(1)-(6)再次获取。
开始根据资源的类型,将资源组织成屏幕上显示的图像,这个过程叫渲染,网页渲染是浏览器最复杂、最核心的功能。
将渲染好的页面图像显示出来,并开始响应用户的操作。
以上只是最基本的步骤,实际不可能就这么简单,一些可选的步骤例如网页缓存、连接池、加载策略、加密解密、代理中转等等都没有提及。即使基本步骤本身也有很复杂的子步骤,TCP/IP、DNS、HTTP、HTML:每一个都可以展开成庞大的课题,而浏览器的基础——操作系统、编译器、硬件等更是一个比一个复杂。不是计算机专业的同学看了上面的解释完全不明白是很正常的,可能会问为什么要搞得那么复杂,但我保证这每一个步骤都经过深思熟虑和时间的考验。你输入URL即可浏览互联网,而计算机系统在背后做了无数你看不到的工作,计算机各个子领域无数工程师为此付出你难以想象的努力。
基于TCP的FTP和基于UDP的TFTP
FTP使用客户端服务器方式,一个FTP服务器进程可以同时为多个客户进程提供服务。FTP的服务器进程由两部分组成:一个是主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
FTP的客户和服务器之间要建立两个并行的tcp连接:“控制连接”和“数据连接”。