一.对url进行解析。url的格式:协议+域名+端口号+数据源(文件)的路径名。
二.生成http消息。
1.http协议定义了客户端和服务器之间交互的额消息内容和步骤。客户端向服务器发送请求小时。请求消息包含的内容是“对什么”(URI)和”进行怎样的操作”(方法) (GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE, CONNECT)。服务器收到消息后,通过uri和方法来完成自己的工作,然后将结果放在响应消息中。响应信息的开头有一个状态码。客户端收到响应消息,浏览器从中读出数据并显示出来。
2.请求消息和响应消息的格式:
< 方法(get,post…)><空格><URI><空格><http版本> //请求行
<头字段名字>:<字段值> //消息头
……
<空行>
<消息体>
3.http中主要的头字段(通用头(适用于请求和响应消息的头字段),请求头(用于请求消息),响应头(用于响应消息),实体头(用于消息体))。
4.一条请求消息中只能写一个URI。如果需要获取多个文件,必须对每个文件单独发送一条请求。
三.向dns服务器查询web服务器的ip地址。
1.ip地址的分类。
IP地址根据网络号和主机号来分,分为A、B、 C三类及特殊地址D、E。全0和全1的都保留不用。
A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。
B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“ 10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。
C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。
D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户。
E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。
在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0~172.31.255.255
C类地址:192.168.0.0~192.168.255.255
回送地址:127.0.0.1。 也是本机地址,等效于localhost或本机IP。一般用于测试使用。例如:ping 127.0.0.1来测试本机TCP/IP是否正常。
2.通过操作系统的socket库中的解析器(dns客户端)向dns服务器发出查询。
<内存地址> = gethostbyname(“www.lab.glasscom.com”);
3.解析器(gethostbyname)的工作流程。
生成发送给dns服务器的查询消息;
向dns服务器发送查询消息;
接收dns服务器返回的响应消息;
从响应消息中取出ip地址,存放到<内存地址>中;
返回应用程序;
四.全世界的dns服务器大接力。
1.域名的层次结构(略)。
五.委托协议栈发送消息。
分为以下阶段:创建套接字;将管道连接到服务器的套接字上(连接阶段);收发数据(通信阶段);断开管道并删除套接字(断开阶段);
1.创建套接字。
<描述符>=socket(<使用ipv4>,<流模式>,……)
描述符是用来识别出某个特定的套接字,协议栈可以根据描述符找到对应的套接字。
2.连接阶段。
connect(<描述符>,<服务器ip地址和端口号>,…..)
ip地址和端口号是客户端和服务器之间用来识别对方套接字的机制。
描述符是应用程序用来识别套接字的机制。
3.通信阶段。
write(<描述符>,<发送数据>,<发送数据长度>,……);
接收数据长度=read(<描述符>,<接收缓冲区>,……);
4.断开阶段。
close(<描述符>);
六.在http1.1版本中可以在一次连接中收发多个请求和响应。
第二章 用电信号传输tcp/ip数据
一.创建套接字。
1.协议栈的内部结构如下。
2.套接字的实体就是通信控制信息。
在创建套接字过程中,协议栈会分配用于存放一个套接字所需的内存空间,用于记录套接字控制信息。通信控制信息包括通信对象的IP地址,端口号,通信操作的进行状态,记录是否已经收到响应,以及发送数据后经过多长时间等。
二.连接服务器。
1.连接实际上是通信双方交换控制信息。
2.连接需要分配一块用来临时存放要收发的数据的内存空间(缓冲区)。
3.控制信息分为2类:1.头部中记录的信息。2.套接字(协议栈中的内存空间)中记录的信息。
4.tcp的头部格式如下 。
5.tcp连接过程为3次握手。
三.收发数据。
1.MTU与MSS。MTU是一个网络包的最大长度,以太网中一般为1500字节。MSS是除去头部之后,一个网络包所能容纳的TCP数据的最大长度。如果发送的数据超过MSS的长度,发送缓冲区中的数据会被以MSS长度为单位进行拆分,拆分出来的每块数据会被放进单独的网络包中。
2.收到数据的一方使用ACK号确认网络包已收到。这是实现错误重传机制的很重要一个环节。
3.根据网络包平均往返时间调整ACK号等待时间(超时重传的等待时间)。由于网络波动很大,所以一般不将等待时间设置为一个固定值,tcp采用动态调整等待时间的方法。
4.tcp使用滑动窗口有效管理ACK号。在发送一个包之后,不等待ACK号返回,而是直接发送后续的一系列包。
5.ACK号和滑动窗口大小的更新,可以合并为一个包发送,提高效率。
四.从服务器断开并删除套接字。
五.tcp的整体流程。 
六.IP与以太网的包收发操作。
1.包的结构是,[MAC头部][IP头部][TCP头部][数据块]
2.包收发操作概览。
2.1 IP模块负责添加如下2个头部:MAC头部(以太网用的头部,包含MAC地址),IP头部(IP用的头部,包含ip地址)。


七.udp协议。
一般用于数据很短,用一个包就能装的下的情况。udp不需要建立和断开连接的步骤,只要从应用程序获取的数据前面加上udp头部,然后交给IP进行发送就可以了。接收也简单,只要根据ip头部中的接收方和发送方ip地址,以及udp头部中的接收方和发送方端口号,找到相应的套接字并将数据交给响应的应用程序就可以了。
第三章 从网线到网络设备(这一章只做了解,略)
1.将包存入缓冲区后,接下来需要查询一下这个包的接收方MAC地址是否已经在MAC地址表中有记录了。MAC地址表主要包含两个信息,一是设备的MAC地址,另一个是该设备连接在交换机的哪个端口上。
2.通过地址转换有效利用IP地址。对互联网开放的部分分配公有地址,可以和互联网直接进行通信。内部设备则分配私有地址,不能和互联网直接收发网络包,而是通过地址转换的机制进行连接。基本原理是转发网络包时对IP头部中的IP地址和端口号(TCP或UDP的端口号)进行改写。改写前的私有地址和端口号以及改写后的公有地址和端口号,会作为一组对应的记录保存在地址转换设备内部的一张表中。
第四章 通过接入网进入互联网内部(不关心,略)
第五章 服务器端的局域网有什么玄机
一. web服务器可部署在公司或网络运营商管理的数据中心里或者直接租用运营商提供的服务器。
二. 防火墙。基本思路是只允许发往特定服务器中的特定应用程序的包通过,然后屏蔽其他包。防火墙可分为包过滤,应用层网关,电路层网关等几种方式,最为普及的是包过滤方式。包过滤方式的防火墙可根据接收方IP地址,发送方IP地址,接收方端口号,发送方端口号,控制位等信息来判断是否允许某个包通过。
三. 通过将请求平均分配给多台服务器来平衡负载
第六章 请求达到web服务器,响应返回浏览器
一. 服务器概览
二. 服务器的接收操作
三. web服务器程序解析请求消息并做出响应
请求消息包括一个称为”方法”的命令,以及表示数据源的URI,服务器程序会根据这些内容向客户端返回数据,但对于不同的方法和URI,服务器内部的工作过程会有所不同。
1.将请求的URI转换为实际的文件名。
2.运行cgi程序。如果判断要访问的文件为程序文件,web服务器会委托操作系统运行这个程序,然后从请求消息中取出数据并交给运行的程序。
四. 浏览器接收响应消息并显示内容。
消息开头的Content-Type头部字段的值来判断信息的数据类型。
完。
原文:https://blog.51cto.com/zhangzhao/2490641