网络端口与应用基础常识大全
2010-04-06 09:32:17 阿炯

网络端口可分为3大类:

1).公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。

2).注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。

3).动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。

本节讲述通常TCP/UDP端口扫描在防火墙记录中的信息。记住:并不存在所谓ICMP端口。如果你对解读ICMP数据感兴趣,请参看本文的其它部分。

0通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当试图使用一种通常的闭合端口连接它时将产生不同的结果。一种典型的扫描:使用IP地址为 0.0.0.0,设置ACK位并在以太网层广播。

1 tcpmux 这显示有人在寻找SGIIrix机器。Irix是实现tcpmux的主要提供者,缺省情况下tcpmux在这种系统中被打开。Iris机器在发布时含有几个缺省的无密码的帐户,如lp,guest, uucp, nuucp, demos, tutor, diag, EZsetup, OutOfBox, 和4Dgifts。许多管理员安装后忘记删除这些帐户。因此Hacker们在Internet上搜索tcpmux 并利用这些帐户。

7 Echo你能看到许多人们搜索Fraggle放大器时,发送到x.x.x.0和x.x.x.255的信息。常见的一种DoS攻击是echo循环 (echo-loop),攻击者伪造从一个机器发送到另一个UDP数据包,而两个机器分别以它们最快的方式回应这些数据包。(参见Chargen) 另一种东西是由DoubleClick在词端口建立的TCP连接。有一种产品叫做Resonate Global Dispatch”,它与DNS的这一端口连接以确定最近的路由。Harvest/squid cache将从3130端口发送UDPecho:“如果将cache的source_ping on选项打开,它将对原始主机的UDP echo端口回应一个HIT reply。”这将会产生许多这类数据包。

11 sysstat这是一种UNIX服务,它会列出机器上所有正在运行的进程以及是什么启动了这些进程。这为入侵者提供了许多信息而威胁机器的安全,如暴露已知某些弱点或帐户的程序。这与UNIX系统中“ps”命令的结果相似再说一遍:ICMP没有端口,ICMP port 11通常是ICMPtype=1119 chargen 这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时,会发送含有垃圾字符的数据流知道连接关闭。Hacker利用IP欺骗可以发动DoS攻击伪造两 个chargen服务器之间的UDP由于服务器企图回应两个服务器之间的无限的往返数据通讯一个chargen和echo将导致服务器过载。同样fraggle DoS攻击向目标地址的这个端口广播一个带有伪造受害者IP的数据包,受害者为了回应这些数据而过载。

21 ftp最常见的攻击者用于寻找打开“anonymous”的ftp服务器的方法。这些服务器带有可读写的目录。Hackers或tackers利用这些服务器作为传送warez (私有程序) 和pr0n(故意拼错词而避免被搜索引擎分类)的节点。

22 sshPcAnywhere建立TCP和这一端口的连接可能是为了寻找ssh。这一服务有许多弱点。如果配置成特定的模式,许多使用RSAREF库的版本 有不少漏洞。(建议在其它端口运行ssh)还应该注意的是ssh工具包带有一个称为ake-ssh-known-hosts的程序。它会扫描整个域的 ssh主机。你有时会被使用这一程序的人无意中扫描到。UDP(而不是TCP)与另一端的5632端口相连意味着存在搜索pcAnywhere的扫描。 5632 (十六进制的0x1600)位交换后是0x0016(使进制的22)。

23 Telnet入侵者在搜索远程登陆UNIX的服务。大多数情况下入侵者扫描这一端口是为了找到机器运行的操作系统。此外使用其它技术,入侵者会找到密码。

25 smtp攻击者(spammer)寻找SMTP服务器是为了传递他们的spam。入侵者的帐户总被关闭,他们需要拨号连接到高带宽的e-mail服务器 上,将简单的信息传递到不同的地址。SMTP服务器(尤其是sendmail)是进入系统的最常用方法之一,因为它们必须完整的暴露于Internet且 邮件的路由是复杂的(暴露+复杂=弱点)。

53 DNSHacker或crackers可能是试图进行区域传递(TCP),欺骗DNS(UDP)或隐藏其它通讯。因此防火墙常常过滤或记录53端口。 需要注意的是你常会看到53端口做为UDP源端口。不稳定的防火墙通常允许这种通讯并假设这是对DNS查询的回复。Hacker常使用这种方法穿透防火墙。

67和68 Bootp和DHCPUDP上的Bootp/DHCP:通过DSL和cable-modem的防火墙常会看见大量发送到广播地址 255.255.255.255的数据。这些机器在向DHCP服务器请求一个地址分配。Hacker常进入它们分配一个地址把自己作为局部路由器而发起大 量的“中间人”(man-in-middle)攻击。客户端向68端口(bootps)广播请求配置,服务器向67端口(bootpc)广播回应请求。这 种回应使用广播是因为客户端还不知道可以发送的IP地址。

69 TFTP(UDP) 许多服务器与bootp一起提供这项服务,便于从系统下载启动代码。但是它们常常错误配置而从系统提供任何文件,如密码文件。它们也可用于向系统写入文件。

79 finger Hacker用于获得用户信息,查询操作系统,探测已知的缓冲区溢出错误,回应从自己机器到其它机器finger扫描。

98 linuxconf 这个程序提供linuxboxen的简单管理。通过整合的HTTP服务器在98端口提供基于Web界面的服务。它已发现有许多安全问题。一些版本setuidroot,信任局域网,在/tmp下建立Internet可访问的文件,LANG环境变量有缓冲区溢出。 此外因为它包含整合的服务器,许多典型的HTTP漏洞可能存在(缓冲区溢出,历遍目录等)

109 POP2并不象POP3那样有名,但许多服务器同时提供两种服务(向后兼容)。在同一个服务器上POP3的漏洞在POP2中同样存在。

110 POP3用于客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交换缓冲区溢出的弱点至少有20个(这意味着Hacker可以在真正登陆前进入系统)。成功登陆后还有其它缓冲区溢出错误。

111 sunrpc portmap rpcbind Sun RPCPortMapper/RPCBIND。访问portmapper是扫描系统查看允许哪些RPC服务的最早的一步。常 见RPC服务有:pc.mountd, NFS, rpc.statd, rpc.csmd, rpc.ttybd, amd等。入侵者发现了允许的RPC服务将转向提供 服务的特定端口测试漏洞。记住一定要记录线路中的daemon, IDS, 或sniffer,你可以发现入侵者正使用什么程序访问以便发现到底发生了什么。

113 Ident auth .这是一个许多机器上运行的协议,用于鉴别TCP连接的用户。使用标准的这种服务可以获得许多机器的信息(会被Hacker利用)。但是它可作为许多服务的记录器,尤其是FTP, POP, IMAP, SMTP和IRC等服务。通常如果有许多客户通过防火墙访问这些服务,你将会看到许多这个端口的连接请求。记住,如果你阻断这个端口客户端会感觉到在防火墙另一边与e-mail服务器的缓慢连接。许多防火墙支持在TCP连接的阻断过程中发回T,着将回停止这一缓慢的连接。

119 NNTP news新闻组传输协议,承载USENET通讯。当你链接到诸如:news.security.firewalls/. 的地址时通常使用这个端口。这个端口的连接企图通常是人们在寻找USENET服务器。多数ISP限制只有他们的客户才能访问他们的新闻组服务器。打开新闻组服务器将允许发/读任何人的帖子,访问被限制的新闻组服务器,匿名发帖或发送spam。

135 oc-serv MS RPC end-point mapper Microsoft在这个端口运行DCE RPC end- point mapper为它的DCOM服务。这与UNIX 111端口的功能很相似。使用DCOM和/或RPC的服务利用 机器上的end-point mapper注册它们的位置。远端客户连接到机器时,它们查询end-point mapper找到服务的位置。同样Hacker扫描机器的这个端口是为了找到诸如:这个机器上运 行Exchange Server吗?是什么版本? 这个端口除了被用来查询服务(如使用epdump)还可以被用于直接攻击。有一些DoS攻击直接针对这个端口。

137 NetBIOS name service nbtstat (UDP)这是防火墙管理员最常见的信息,请仔细阅读文章后面的NetBIOS一节 139 NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows“文件和打印机共享”和SAMBA。在Internet上共享自己的硬盘是可能是最常见的问题。 大量针对这一端口始于1999,后来逐渐变少。2000年又有回升。一些VBS(IE5 VisualBasicScripting)开始将它们自己拷贝到这个端口,试图在这个端口繁殖。

143 IMAP和上面POP3的安全问题一样,许多IMAP服务器有缓冲区溢出漏洞运行登陆过程中进入。记住:一种Linux蠕虫(admw0rm)会通过这个 端口繁殖,因此许多这个端口的扫描来自不知情的已被感染的用户。当RadHat在他们的Linux发布版本中默认允许IMAP后,这些漏洞变得流行起来。 Morris蠕虫以后这还是第一次广泛传播的蠕虫。这一端口还被用于IMAP2,但并不流行。 已有一些报道发现有些0到143端口的攻击源于脚本。

161 SNMP(UDP)入侵者常探测的端口。SNMP允许远程管理设备。所有配置和运行信息都储存在数据库中,通过SNMP客获得这些信息。许多管理员错误配 置将它们暴露于Internet。Crackers将试图使用缺省的密码“public”“private”访问系统。他们可能会试验所有可能的组合。 SNMP包可能会被错误的指向你的网络。Windows机器常会因为错误配置将HP JetDirect rmote management软件使用SNMP。HP OBJECT IDENTIFIER将收到SNMP包。新版的Win98使用SNMP解析域名,你会看见这种包在子网内广播(cable modem, DSL)查询sysName和其它信息。

162 SNMP trap 可能是由于错误配置。

177 xdmcp 许多Hacker通过它访问X-Windows控制台,它同时需要打开6000端口。

513 rwho 可能是从使用cable modem或DSL登陆到的子网中的UNIX机器发出的广播。这些人为Hacker进入他们的系统提供了很有趣的信息。

553 CORBA IIOP (UDP) 如果你使用cable modem或DSL VLAN,你将会看到这个端口的广播。CORBA是一种面向对象的RPC(remote procedure call)系统。Hacker会利用这些信息进入系统。

600 Pcserver backdoor 请查看1524端口一些玩script的孩子认为他们通过修改ingreslock和pcserver文件已经完全攻破了系统-- Alan J. Rosenthal.

635 mountd Linux的mountd Bug。这是人们扫描的一个流行的Bug。大多数对这个端口的扫描是基于UDP的,但基于TCP 的mountd有所增加(mountd同时运行于两个端口)。记住,mountd可运行于任何端口(到底在哪个端口,需要在端口111做portmap查 询),只是Linux默认为635端口,就象NFS通常运行于2049端口1024 许多人问这个端口是干什么的。它是动态端口的开始。许多程序并不在乎用哪个端口连接网络,它们请求操作系统为它们分配“下一个闲置端口”。基于这一点分配 从端口1024开始。这意味着第一个向系统请求分配动态端口的程序将被分配端口1024。为了验证这一点,你可以重启机器,打开Telnet,再打开一个 窗口运行“natstat -a”,你将会看到Telnet被分配1024端口。请求的程序越多,动态端口也越多。操作系统分配的端口将逐渐变大。再来一遍,当你浏览Web页时用 “netstat”查看,每个Web页需要一个新端口。

1080 SOCKS 这一协议以管道方式穿过防火墙,允许防火墙后面的许多人通过一个IP地址访问Internet。理论上它应该只允许内部的通信向外达到Internet。 但是由于错误的配置,它会允许Hacker/Cracker的位于防火墙外部的攻击穿过防火墙。或者简单地回应位于Internet上的计算机,从而掩饰 他们对你的直接攻击。WinGate是一种常见的Windows个人防火墙,常会发生上述的错误配置。在加入IRC聊天室时常会看到这种情况。

1114 SQL 系统本身很少扫描这个端口,但常常是sscan脚本的一部分。

1524 ingreslock后门 许多攻击脚本将安装一个后门Sh*ll 于这个端口(尤其是那些针对Sun系统中Sendmail和RPC服务漏洞的脚本,如statd,ttdbserver和cmsd)。如果你刚刚安装了你 的防火墙就看到在这个端口上的连接企图,很可能是上述原因。你可以试试Telnet到你的机器上的这个端口,看看它是否会给你一个Sh*ll 。连接到600/pcserver也存在这个问题。

2049 NFS NFS程序常运行于这个端口。通常需要访问portmapper查询这个服务运行于哪个端口,可以闭开portmapper直接测试这个端口。

3128 squid 这是Squid HTTP代理服务器的默认端口。攻击者扫描这个端口是为了搜寻一个代理服务器而匿名访问Internet。你也会看到搜索其它代理服务器的端口:
000/8001/8080/8888。扫描这一端口的另一原因是:用户正在进入聊天室。其它用户(或服务器本身)也会检验这个端口以确定用户的机器是否支持代理。

5632 pcAnywere你会看到很多这个端口的扫描,这依赖于所在的位置。当用户打开pcAnywere时,它会自动扫描局域网C类网以寻找可能得代理(译 者:指agent而不是proxy)。Hacker/cracker也会寻找开放这种服务的机器,所以应该查看这种扫描的源地址。一些搜寻 pcAnywere的扫描常包含端口22的UDP数据包。参见拨号扫描。

6776 Sub-7 artifact 这个端口是从Sub-7主端口分离出来的用于传送数据的端口。例如当控制者通过电话线控制另一台机器,而被控机器挂断时你将会看到这种情况。因此当另一人 以此IP拨入时,他们将会看到持续的,在这个端口的连接企图。(译者:即看到防火墙报告这一端口的连接企图时,并不表示你已被Sub-7控制。)

6970 RealAudio RealAudio客户将从服务器的6970-7170的UDP端口接收音频数据流。这是由TCP7070端口外向控制连接设置13223 PowWow PowWow 是Tribal Voice的聊天程序。它允许用户在此端口打开私人聊天的接。这一程序对于建立连接非常具有“进攻性”。它会“驻扎”在这一TCP端口等待回应。这造成类 似心跳间隔的连接企图。如果你是一个拨号用户,从另一个聊天者手中“继承”了IP地址这种情况就会发生:好象很多不同的人在测试这一端口。这一协议使用 “OPNG”作为其连接企图的前四个字节。

17027 Conducent这是一个外向连接。这是由于公司内部有人安装了带有Conducent "adbot" 的共享软件。 Conducent "adbot"是为共享软件显示广告服务的。使用这种服务的一种流行的软件是Pkware。有人试验:阻断这一外向连接不会有任何问题,但是封掉IP地址本身将会导致adbots持续在每秒内试图连接多次而导致连接过载: 机器会不断试图解析DNS名─ads.conducent.com,即IP地址216.33.210.40 ;
216.33.199.77 ;216.33.199.80 ;216.33.199.81;216.33.210.41。(译者:不知NetAnts使用的Radiate是否也有这种现象)

30100 NetSphere木马(TCP) 通常这一端口的扫描是为了寻找中了NetSphere木马。

31337 Back Orifice “eliteHacker中31337读做“elite”/ei’li:t/(译者:法语,译为中坚力量,精华。即 3=E, 1=L, 7=T)。因此许多后门程序运行于这一端口。其中最有名的是Back Orifice。曾经一段时间内这是Internet上最常见的扫描。现在它的流行越来越少,其它的 木马程序越来越流行。

31789 Hack-a-tack 这一端口的UDP通讯通常是由于"Hack-a-tack"远程访问木马(RAT,Remote Access Trojan)。这种木马包含内置的31790端口扫描器,因此任何31789端口到317890端口的连 接意味着已经有这种入侵。(31789端口是控制连接,317890端口是文件传输连接)

32770~32900 RPC服务 Sun Solaris的RPC服务在这一范围内。详细的说:早期版本的Solaris(2.5.1之前)将 portmapper置于这一范围内,即使低端口被防火墙封闭仍然允许Hacker/cracker访问这一端口。 扫描这一范围内的端口不是为了寻找portmapper,就是为了寻找可被攻击的已知的RPC服务。
33434~33600 traceroute 如果你看到这一端口范围内的UDP数据包(且只在此范围之内)则可能是由于traceroute。
41508 Inoculan早期版本的Inoculan会在子网内产生大量的UDP通讯用于识别彼此
端口1~1024是保留端口,所以它们几乎不会是源端口。但有一些例外,例如来自NAT机器的连接。 常看见紧接着1024的端口,它们是系统分配给那些并不在乎使用哪个端口连接的应用程序的“动态端口”。

Server Client 服务描述
1-5/tcp 动态 FTP 1-5端口意味着sscan脚本
20/tcp 动态 FTP FTP服务器传送文件的端口
53 动态 FTP DNS从这个端口发送UDP回应。你也可能看见源/目标端口的TCP连接。
123 动态 S/NTP 简单网络时间协议(S/NTP)服务器运行的端口。它们也会发送到这个端口的广播。
27910~27961/udp 动态 Quake Quake或Quake引擎驱动的游戏在这一端口运行其服务器。因此来自这一端口范围的UDP包或发送至这一端口范围的UDP包通常是游戏。
61000以上 动态 FTP 61000以上的端口可能来自Linux NAT服务器


快速索引:

著名端口
UNIX 特有的端口
注册的端口
数据报传递协议端口
Kerberos(工程 Athena/MIT)端口
未注册的端口

著名端口


端口号码 / 层     名称     注释
1     tcpmux     TCP 端口服务多路复用
5     rje     远程作业入口
7     echo     Echo 服务
9     discard     用于连接测试的空服务
11     systat     用于列举连接了的端口的系统状态
13     daytime     给请求主机发送日期和时间
17     qotd     给连接了的主机发送每日格言
18     msp     消息发送协议
19     chargen     字符生成服务;发送无止境的字符流
20     ftp-data     FTP 数据端口
21     ftp     文件传输协议(FTP)端口;有时被文件服务协议(FSP)使用
22     ssh     安全 Shell(SSH)服务
23     telnet     Telnet 服务
25     smtp     简单邮件传输协议(SMTP)
37     time     时间协议
39     rlp     资源定位协议
42     nameserver     互联网名称服务
43     nicname     WHOIS 目录服务
49     tacacs     用于基于 TCP/IP 验证和访问的终端访问控制器访问控制系统
50     re-mail-ck     远程邮件检查协议
53     domain     域名服务(如 BIND)
63     whois++     WHOIS++,被扩展了的 WHOIS 服务
67     bootps     引导协议(BOOTP)服务;还被动态主机配置协议(DHCP)服务使用
68     bootpc     Bootstrap(BOOTP)客户;还被动态主机配置协议(DHCP)客户使用
69     tftp     小文件传输协议(TFTP)
70     gopher     Gopher 互联网文档搜寻和检索
71     netrjs-1     远程作业服务
72     netrjs-2     远程作业服务
73     netrjs-3     远程作业服务
73     netrjs-4     远程作业服务
79     finger     用于用户联系信息的 Finger 服务
80     http     用于万维网(WWW)服务的超文本传输协议(HTTP)
88     kerberos     Kerberos 网络验证系统
95     supdup     Telnet 协议扩展
101     hostname     SRI-NIC 机器上的主机名服务
102     iso-tsap     ISO 开发环境(ISODE)网络应用
105     csnet-ns     邮箱名称服务器;也被 CSO 名称服务器使用
107     rtelnet     远程 Telnet
109     pop2     邮局协议版本2
110     pop3     邮局协议版本3
111     sunrpc     用于远程命令执行的远程过程调用(RPC)协议,被网络文件系统(NFS)使用
113     auth     验证和身份识别协议
115     sftp     安全文件传输协议(SFTP)服务
117     uucp-path     Unix 到 Unix 复制协议(UUCP)路径服务
119     nntp     用于 USENET 讨论系统的网络新闻传输协议(NNTP)
123     ntp     网络时间协议(NTP)
137     netbios-ns     在红帽企业 Linux 中被 Samba 使用的 NETBIOS 名称服务
138     netbios-dgm     在红帽企业 Linux 中被 Samba 使用的 NETBIOS 数据报服务
139     netbios-ssn     在红帽企业 Linux 中被 Samba 使用的NET BIOS 会话服务
143     imap     互联网消息存取协议(IMAP)
161     snmp     简单网络管理协议(SNMP)
162     snmptrap     SNMP 的陷阱
163     cmip-man     通用管理信息协议(CMIP)
164     cmip-agent     通用管理信息协议(CMIP)
174     mailq     MAILQ
177     xdmcp     X 显示管理器控制协议
178     nextstep     NeXTStep 窗口服务器
179     bgp     边界网络协议
191     prospero     Cliffod Neuman 的 Prospero 服务
194     irc     互联网中继聊天(IRC)
199     smux     SNMP UNIX 多路复用
201     at-rtmp     AppleTalk 选路
202     at-nbp     AppleTalk 名称绑定
204     at-echo     AppleTalk echo 服务
206     at-zis     AppleTalk 区块信息
209     qmtp     快速邮件传输协议(QMTP)
210     z39.50     NISO Z39.50 数据库
213     ipx     互联网络分组交换协议(IPX),被 Novell Netware 环境常用的数据报协议
220     imap3     互联网消息存取协议版本3
245     link     LINK
347     fatserv     Fatmen 服务器
363     rsvp_tunnel     RSVP 隧道
369     rpc2portmap     Coda 文件系统端口映射器
370     codaauth2     Coda 文件系统验证服务
372     ulistproc     UNIX Listserv
389     ldap     轻型目录存取协议(LDAP)
427     svrloc     服务位置协议(SLP)
434     mobileip-agent     可移互联网协议(IP)代理
435     mobilip-mn     可移互联网协议(IP)管理器
443     https     安全超文本传输协议(HTTP)
444     snpp     小型网络分页协议
445     microsoft-ds     通过 TCP/IP 的服务器消息块(SMB)
464     kpasswd     Kerberos 口令和钥匙改换服务
468     photuris     Photuris 会话钥匙管理协议
487     saft     简单不对称文件传输(SAFT)协议
488     gss-http     用于 HTTP 的通用安全服务(GSS)
496     pim-rp-disc     用于协议独立的多址传播(PIM)服务的会合点发现(RP-DISC)
500     isakmp     互联网安全关联和钥匙管理协议(ISAKMP)
535     iiop     互联网内部对象请求代理协议(IIOP)
538     gdomap     GNUstep 分布式对象映射器(GDOMAP)
546     dhcpv6-client     动态主机配置协议(DHCP)版本6客户
547     dhcpv6-server     动态主机配置协议(DHCP)版本6服务
554     rtsp     实时流播协议(RTSP)
563     nntps     通过安全套接字层的网络新闻传输协议(NNTPS)
565     whoami     whoami
587     submission     邮件消息提交代理(MSA)
610     npmp-local     网络外设管理协议(NPMP)本地 / 分布式排队系统(DQS)
611     npmp-gui     网络外设管理协议(NPMP)GUI / 分布式排队系统(DQS)
612     hmmp-ind     HMMP 指示 / DQS
631     ipp     互联网打印协议(IPP)
636     ldaps     通过安全套接字层的轻型目录访问协议(LDAPS)
674     acap     应用程序配置存取协议(ACAP)
694     ha-cluster     用于带有高可用性的群集的心跳服务
749     kerberos-adm     Kerberos 版本5(v5)的“kadmin”数据库管理
750     kerberos-iv     Kerberos 版本4(v4)服务
765     webster     网络词典
767     phonebook     网络电话簿
873     rsync     rsync 文件传输服务
992     telnets     通过安全套接字层的 Telnet(TelnetS)
993     imaps     通过安全套接字层的互联网消息存取协议(IMAPS)
994     ircs     通过安全套接字层的互联网中继聊天(IRCS)
995     pop3s     通过安全套接字层的邮局协议版本3(POPS3)

UNIX 特有的端口

以下端口是 UNIX 特有的,涉及了从电子邮件到验证不等的服务。在方括号内的名称(如 [service])是服务的守护进程名称或它的常用别名。
端口号码 / 层     名称     注释
512/tcp     exec     用于对远程执行的进程进行验证
512/udp     biff [comsat]     异步邮件客户(biff)和服务(comsat)
513/tcp     login     远程登录(rlogin)
513/udp     who [whod]     登录的用户列表
514/tcp     shell [cmd]     不必登录的远程 shell(rshell)和远程复制(rcp)
514/udp     syslog     UNIX 系统日志服务
515     printer [spooler]     打印机(lpr)假脱机
517/udp     talk     远程对话服务和客户
518/udp     ntalk     网络交谈(ntalk),远程对话服务和客户
519     utime [unixtime]     UNIX 时间协议(utime)
520/tcp     efs     扩展文件名服务器(EFS)
520/udp     router [route, routed]     选路信息协议(RIP)
521     ripng     用于互联网协议版本6(IPv6)的选路信息协议
525     timed [timeserver]     时间守护进程(timed)
526/tcp     tempo [newdate]     Tempo
530/tcp     courier [rpc]     Courier 远程过程调用(RPC)协议
531/tcp     conference [chat]     互联网中继聊天
532     netnews     Netnews
533/udp     netwall     用于紧急广播的 Netwall
540/tcp     uucp [uucpd]     Unix 到 Unix 复制服务
543/tcp     klogin     Kerberos 版本5(v5)远程登录
544/tcp     kshell     Kerberos 版本5(v5)远程 shell
548     afpovertcp     通过传输控制协议(TCP)的 Appletalk 文件编制协议(AFP)
556     remotefs [rfs_server, rfs]     Brunhoff 的远程文件系统(RFS)

已注册的端口

列举了由网络和软件社区向 IANA 提交的要在端口号码列表中正式注册的端口。
端口号码 / 层     名称     注释
1080     socks     SOCKS 网络应用程序代理服务
1236     bvcontrol [rmtcfg]     Garcilis Packeten 远程配置服务器
1300     h323hostcallsc     H.323 电话会议主机电话安全
1433     ms-sql-s     Microsoft SQL 服务器
1434     ms-sql-m     Microsoft SQL 监视器
1494     ica     Citrix ICA 客户
1512     wins     Microsoft Windows 互联网名称服务器
1524     ingreslock     Ingres 数据库管理系统(DBMS)锁定服务
1525     prospero-np     无特权的 Prospero
1645     datametrics [old-radius]     Datametrics / 从前的 radius 项目
1646     sa-msg-port [oldradacct]     sa-msg-port / 从前的 radacct 项目
1649     kermit     Kermit 文件传输和管理服务
1701     l2tp [l2f]     第2层隧道服务(LT2P) / 第2层转发(L2F)
1718     h323gatedisc     H.323 电讯守门装置发现机制
1719     h323gatestat     H.323 电讯守门装置状态
1720     h323hostcall     H.323 电讯主持电话设置
1758     tftp-mcast     小文件 FTP 组播
1759     mtftp     组播小文件 FTP(MTFTP)
1789     hello     Hello 路由器通信端口
1812     radius     Radius 拨号验证和记帐服务
1813     radius-acct     Radius 记帐
1911     mtp     Starlight 网络多媒体传输协议(MTP)
1985     hsrp     Cisco 热备用路由器协议
1986     licensedaemon     Cisco 许可管理守护进程
1997     gdp-port     Cisco 网关发现协议(GDP)
2049     nfs [nfsd]     网络文件系统(NFS)
2102     zephyr-srv     Zephyr 通知传输和发送服务器
2103     zephyr-clt     Zephyr serv-hm 连接
2104     zephyr-hm     Zephyr 主机管理器
2401     cvspserver     并行版本系统(CVS)客户 / 服务器操作
2430/tcp     venus     用于 Coda 文件系统(codacon 端口)的 Venus 缓存管理器
2430/udp     venus     用于 Coda 文件系统(callback/wbc interface 界面)的 Venus 缓存管理器
2431/tcp     venus-se     Venus 传输控制协议(TCP)的副作用
2431/udp     venus-se     Venus 用户数据报协议(UDP)的副作用
2432/udp     codasrv     Coda 文件系统服务器端口
2433/tcp     codasrv-se     Coda 文件系统 TCP 副作用
2433/udp     codasrv-se     Coda 文件系统 UDP SFTP 副作用
2600     hpstgmgr [zebrasrv]     HPSTGMGR;Zebra 选路
2601     discp-client [zebra]     discp 客户;Zebra 集成的 shell
2602     discp-server [ripd]     discp 服务器;选路信息协议守护进程(ripd)
2603     servicemeter [ripngd]     服务计量;用于 IPv6 的 RIP 守护进程
2604     nsc-ccs [ospfd]     NSC CCS;开放式短路径优先守护进程(ospfd)
2605     nsc-posa     NSC POSA;边界网络协议守护进程(bgpd)
2606     netmon [ospf6d]     Dell Netmon;用于 IPv6 的 OSPF 守护进程(ospf6d)
2809     corbaloc     公共对象请求代理体系(CORBA)命名服务定位器
3130     icpv2     互联网缓存协议版本2(v2);被 Squid 代理缓存服务器使用
3306     mysql     MySQL 数据库服务
3346     trnsprntproxy     Trnsprnt 代理
4011     pxe     执行前环境(PXE)服务
4321     rwhois     远程 Whois(rwhois)服务
4444     krb524     Kerberos 版本5(v5)到版本4(v4)门票转换器
5002     rfe     无射频以太网(RFE)音频广播系统
5308     cfengine     配置引擎(Cfengine)
5999     cvsup [CVSup]     CVSup 文件传输和更新工具
6000     x11 [X]     X 窗口系统服务
7000     afs3-fileserver     Andrew 文件系统(AFS)文件服务器
7001     afs3-callback     用于给缓存管理器回电的 AFS 端口
7002     afs3-prserver     AFS 用户和组群数据库
7003     afs3-vlserver     AFS 文件卷位置数据库
7004     afs3-kaserver     AFS Kerberos 验证服务
7005     afs3-volser     AFS 文件卷管理服务器
7006     afs3-errors     AFS 错误解释服务
7007     afs3-bos     AFS 基本监查进程
7008     afs3-update     AFS 服务器到服务器更新器
7009     afs3-rmtsys     AFS 远程缓存管理器服务
9876     sd     会话指引器
10080     amanda     高级 Maryland 自动网络磁盘归档器(Amanda)备份服务
11371     pgpkeyserver     良好隐私(PGP) / GNU 隐私卫士(GPG)公钥服务器
11720     h323callsigalt     H.323 调用信号交替
13720     bprd     Veritas NetBackup 请求守护进程(bprd)
13721     bpdbm     Veritas NetBackup 数据库管理器(bpdbm)
13722     bpjava-msvc     Veritas NetBackup Java / Microsoft Visual C++ (MSVC) 协议
13724     vnetd     Veritas 网络工具
13782     bpcd     Vertias NetBackup
13783     vopied     Veritas VOPIED 协议
22273     wnn6 [wnn4]     假名/汉字转换系统
26000     quake     Quake(以及相关的)多人游戏服务器
26208     wnn6-ds     
33434     traceroute     Traceroute 网络跟踪工具

注:/etc/services中的注释如下:端口1236被注册为“bvcontrol”,但是它也被 Gracilis Packeten 远程配置服务器使用。正式名称被列为主要名称,未注册的名称被列为别名。

在/etc/services中的注释:端口 2600 到 2606 被 zebra 软件包未经注册而使用。主要名称是被注册的名称,被 zebra 使用的未注册名称被列为别名。

/etc/services 文件中的注释:该端口被注册为 wnn6,但是还在 FreeWnn 软件包中使用了未注册的“wnn4”。

数据报传递协议端口


显示了一个和数据报传递协议(DDP)有关的端口列表。DDP 在 AppleTalk 网络上被使用。
端口号码 / 层     名称     注释
1/ddp     rtmp     路由表管理协议
2/ddp     nbp     名称绑定协议
4/ddp     echo     AppleTalk Echo 协议
6/ddp     zip     区块信息协议

Kerberos(工程 Athena/MIT)端口

和 Kerberos 网络验证协议相关的端口列表。在标记的地方,v5 代表 Kerberos 版本5协议。注意,这些端口没有在 IANA 注册。
端口号码 / 层     名称     注释
751     kerberos_master     Kerberos 验证
752     passwd_server     Kerberos 口令(kpasswd)服务器
754     krb5_prop     Kerberos v5 从属传播
760     krbupdate [kreg]     Kerberos 注册
1109     kpop     Kerberos 邮局协议(KPOP)
2053     knetd     Kerberos 多路分用器
2105     eklogin     Kerberos v5 加密的远程登录(rlogin)

未注册的端口

一个未注册的端口列表。这些端口可能被安装在你的 Linux 系统上的服务或协议使用,或者它们是在 Linux 和运行其它操作系统的机器通信所必需的端口。
端口号码 / 层     名称     注释
15/tcp     netstat     网络状态(netstat)
98/tcp     linuxconf     Linuxconf Linux 管理工具
106     poppassd     邮局协议口令改变守护进程(POPPASSD)
465/tcp     smtps     通过安全套接字层的简单邮件传输协议(SMTPS)
616/tcp     gii     使用网关的(选路守护进程)互动界面
808     omirr [omirrd]     联机镜像(Omirr)文件镜像服务
871/tcp     supfileserv     软件升级协议(SUP)服务器
901/tcp     swat     Samba 万维网管理工具(SWAT)
953     rndc     Berkeley 互联网名称域版本9(BIND 9)远程名称守护进程配置工具
1127     sufiledbg     软件升级协议(SUP)调试
1178/tcp     skkserv     简单假名到汉字(SKK)日文输入服务器
1313/tcp     xtel     法国 Minitel 文本信息系统
1529/tcp     support [prmsd, gnatsd]     GNATS 错误跟踪系统
2003/tcp     cfinger     GNU Finger 服务
2150     ninstall     网络安装服务
2988     afbackup     afbackup 客户-服务器备份系统
3128/tcp     squid     Squid 万维网代理缓存
3455     prsvp     RSVP 端口
5432     postgres     PostgreSQL 数据库
4557/tcp     fax     FAX 传输服务(旧服务)
4559/tcp     hylafax     HylaFAX 客户-服务器协议(新服务)
5232     sgi-dgl     SGI 分布式图形库
5354     noclog     NOCOL 网络操作中心记录守护进程(noclogd)
5355     hostmon     NOCOL 网络操作中心主机监视
5680/tcp     canna     Canna 日文字符输入界面
6010/tcp     x11-ssh-offset     安全 Shell(SSH)X11 转发偏移
6667     ircd     互联网中继聊天守护进程(ircd)
7100/tcp     xfs     X 字体服务器(XFS)
7666/tcp     tircproxy     Tircproxy IRC 代理服务
8008     http-alt     超文本传输协议(HTTP)的另一选择
8080     webcache     万维网(WWW)缓存服务
8081     tproxy     透明代理
9100/tcp     jetdirect [laserjet, hplj]     Hewlett-Packard (HP) JetDirect 网络打印服务
9359     mandelspawn [mandelbrot]     用于 X 窗口系统的并行 Mandelbrot 生成程序
10081     kamanda     使用 Kerberos 的 Amanda 备份服务
10082/tcp     amandaidx     Amanda 备份服务
10083/tcp     amidxtape     Amanda 备份服务
20011     isdnlog     综合业务数字网(ISDN)登录系统
20012     vboxd     ISDN 音箱守护进程(vboxd)
22305/tcp     wnn4_Kr     kWnn 韩文输入系统
22289/tcp     wnn4_Cn     cWnn 中文输入系统
22321/tcp     wnn4_Tw     tWnn 中文输入系统(台湾)
24554     binkp     Binkley TCP/IP Fidonet 邮寄程序守护进程
27374     asp     地址搜索协议
60177     tfido     Ifmail FidoNet 兼容邮寄服务
60179     fido     FidoNet 电子邮件和新闻网络


上面说了端口知识,接下来再简单地介绍一下网络及其应用的相关知识点。

计算机网络、计算机操作系统这两个“兄弟”是所有开发岗位都需要“结拜”的,不管你是开发还是测试。对于后端开发的人员来说,计算机网络的重要性不亚于语言基础,毕竟平时开发经常会和网络打交道,比如抓个包等等。所以对这一块知识点的准备还是要抱着敬畏之心,不要放过任何一个漏网之题。下面分享我的学习过程:

1.看书:对于计算机比较基础的模块,我都是比较推荐找一本经典的书籍来好好学习下,不可以只看面经就去面试了。有两本书可以推荐:汤小丹的《计算机操作系统》和《图解HTTP》。《计算机操作系统》是教科书,所以知识点相对比较基础,覆盖范围也比较广,非科班的学生还是很有必要看一看的。《图解HTTP》这本书用很多插图将一些知识点讲的通俗易懂,看起来也很快,还是比较推荐的。

2.做笔记:计算机网络的知识点还是比较多的,需要看书的时候做好笔记,方便复习。而且做笔记的时候可以就这个知识点去百度下,看看有没有自己遗漏的点,再给补充进来。在这里说下,我为什么一直强调做笔记?
好处1:做笔记是第 1 次你对书中的知识点的回顾,加深记忆;
好处2:而且如果你是发表在公关社区的肯定要保证最大限度的正确性,就需要再去看看这个知识点,核对下自己是否有理解偏差和遗漏等,这样就完成了知识点的深挖;好处3:正在到面试复习的时候,你是不太可能重新看一本书的,那么笔记就显得很重要了,自己做的笔记,复习起来很快,而且最好在笔记里能有一些自己区别于面经的理解。

3.看面经:经常刷一刷牛客,看看对于计算机网络,面试官们都是怎么问的?很多问题你可能会,但是不懂面试官的问法,也会回答不上来;问到的题目自己是否准备了?而且对于计算机网络和计算机操作系统会因为公司和岗位的不同而有所侧重的,多看看面经就会发现还是有一点规律的,但是这都不是绝对的,最后还要看面你的面试官的喜好。

1、谈下你对五层网络协议体系结构的理解?

学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。

1. 应用层

应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统 DNS,支持万维网应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。我们把应用层交互的数据单元称为报文。

2. 运输层

运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。

3. 网络层

在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP / IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报,简称数据报。

4. 数据链路层

数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如:同步信息,地址信息,差错控制等)。

在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层。控制信息还使接收端能够检测到所收到的帧中有无差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的协议复杂些。

5. 物理层

在物理层上所传送的数据单位是比特。物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

2、简单说下每一层对应的网络协议有哪些?

计算机五层网络体系中涉及的协议非常多,下面就常用的做了列举:


3、ARP 协议的工作原理?

网络层的 ARP 协议完成了 IP 地址与物理地址的映射。首先,每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP 列表中是否存在该 IP 地址对应的 MAC 地址:如果有,就直接将数据包发送到这个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的主机对应的 MAC 地址。

此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址、以及目的主机的 IP 地址。网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和自己的 IP 地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在该 IP 的信息,则将其覆盖,然后给源主机发送一个 ARP 响应数据包,告诉对方自己是它需要查找的 MAC 地址;源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

4、谈下你对 IP 地址分类的理解?

IP 地址是指互联网协议地址,是 IP 协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP 地址编址方案将 IP 地址空间划分为 A、B、C、D、E 五类,其中 A、B、C 是基本类,D、E 类作为多播和保留使用,为特殊地址。每个 IP 地址包括两个标识码(ID),即网络 ID 和主机 ID。同一个物理网络上的所有主机都使用同一个网络 ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机 ID 与其对应。A~E 类地址的特点如下:
A 类地址:以 0 开头,第一个字节范围:0~127;

B 类地址:以 10 开头,第一个字节范围:128~191;

C 类地址:以 110 开头,第一个字节范围:192~223;

D 类地址:以 1110 开头,第一个字节范围为 224~239;

E 类地址:以 1111 开头,保留地址

5、TCP 的主要特点是什么?

1. TCP 是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);

2. 每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一);

3. TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复、并且按序到达;

4. TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;

5. 面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

6、UDP 的主要特点是什么?

1. UDP 是无连接的;

2. UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);

3. UDP 是面向报文的;

4. UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 直播,实时视频会议等);

5. UDP 支持一对一、一对多、多对一和多对多的交互通信;

6. UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。

7、TCP 和 UDP 的区别?

TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的运输服务(TCP 的可靠体现在 TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。

UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如:QQ 语音、 QQ 视频 、直播等等。

8、TCP 和 UDP 分别对应的常见应用层协议有哪些?

1. TCP 对应的应用层协议

FTP:定义了文件传输协议,使用 21 端口。常说某某计算机开了 FTP 服务便是启动了文件传输服务。下载文件,上传主页,都要用到 FTP 服务。

Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于 DOS 模式下的通信服务。如以前的 BBS 是-纯字符界面的,支持 BBS 的服务器将 23 端口打开,对外提供服务。

SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么 SMTP 端口设置这个栏,服务器开放的是 25 号端口。

POP3:它是和 SMTP 对应,POP3 用于接收邮件。通常情况下,POP3 协议所用的是 110 端口。也是说,只要你有相应的使用 POP3 协议的程序(例如 Fo-xmail 或 Outlook),就可以不以 Web 方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163 邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。

HTTP:从 Web 服务器传输超文本到本地浏览器的传送协议。

2. UDP 对应的应用层协议

DNS:用于域名解析服务,将域名地址转换为 IP 地址。DNS 用的是 53 号端口。

SNMP:简单网络管理协议,使用 161 号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。

TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口 69 上使用 UDP 服务。

9、详细说下 TCP 三次握手的过程?

1. 三次握手

TCP 建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个 TCP 报文段。


最初客户端和服务端都处于 CLOSED(关闭) 状态。本例中 A(Client) 主动打开连接,B(Server) 被动打开连接。

一开始,B 的 TCP 服务器进程首先创建传输控制块TCB,准备接受客户端进程的连接请求。然后服务端进程就处于 LISTEN(监听) 状态,等待客户端的连接请求。如有,立即作出响应。

第一次握手:A 的 TCP 客户端进程也是首先创建传输控制块 TCB。然后,在打算建立 TCP 连接时,向 B 发出连接请求报文段,这时首部中的同步位 SYN=1,同时选择一个初始序号 seq = x。TCP 规定,SYN 报文段(即 SYN = 1 的报文段)不能携带数据,但要消耗掉一个序号。这时,TCP 客户进程进入 SYN-SENT(同步已发送)状态。

第二次握手:B 收到连接请求报文后,如果同意建立连接,则向 A 发送确认。在确认报文段中应把 SYN 位和 ACK 位都置 1,确认号是 ack = x + 1,同时也为自己选择一个初始序号 seq = y。请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时 TCP 服务端进程进入 SYN-RCVD(同步收到)状态。

第三次握手:TCP 客户进程收到 B 的确认后,还要向 B 给出确认。确认报文段的 ACK 置 1,确认号 ack = y + 1,而自己的序号 seq = x + 1。这时 ACK 报文段可以携带数据。但如果不携带数据则不消耗序号,这种情况下,下一个数据报文段的序号仍是 seq = x + 1。这时,TCP 连接已经建立,A 进入 ESTABLISHED(已建立连接)状态。

10、为什么两次握手不可以呢?

为了防止已经失效的连接请求报文段突然又传送到了 B,因而产生错误。比如下面这种情况:A 发出的第一个连接请求报文段并没有丢失,而是在网路结点长时间滞留了,以致于延误到连接释放以后的某个时间段才到达 B。本来这是一个早已失效的报文段。但是 B 收到此失效的链接请求报文段后,就误认为 A 又发出一次新的连接请求。于是就向 A 发出确认报文段,同意建立连接。

对于上面这种情况,如果不进行第三次握手,B 发出确认后就认为新的运输连接已经建立了,并一直等待 A 发来数据。B 的许多资源就这样白白浪费了。

如果采用了三次握手,由于 A 实际上并没有发出建立连接请求,所以不会理睬 B 的确认,也不会向 B 发送数据。B 由于收不到确认,就知道 A 并没有要求建立连接。

11、为什么不需要四次握手?

有人可能会说 A 发出第三次握手的信息后在没有接收到 B 的请求就已经进入了连接状态,那如果 A 的这个确认包丢失或者滞留了怎么办?

我们需要明白一点,完全可靠的通信协议是不存在的。在经过三次握手之后,客户端和服务端已经可以确认之前的通信状况,都收到了确认信息。所以即便再增加握手次数也不能保证后面的通信完全可靠,所以是没有必要的。

12、Server 端收到 Client 端的 SYN 后,为什么还要传回 SYN?

接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。

SYN 是 TCP / IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement[汉译:确认字符,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误])消息响应。这样在客户机和服务器之间才能建立起可靠的 TCP 连接,数据才可以在客户机和服务器之间传递。

13、传了 SYN,为什么还要传 ACK?

双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

14、详细说下 TCP 四次挥手的过程?

据传输结束后,通信的双方都可以释放连接。现在 A 和 B 都处于 ESTABLISHED 状态。


第一次挥手:A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。A 把连接释放报文段首部的终止控制位 FIN 置 1,其序号 seq = u(等于前面已传送过的数据的最后一个字节的序号加 1),这时 A 进入 FIN-WAIT-1(终止等待1)状态,等待 B 的确认。请注意:TCP 规定,FIN 报文段即使不携带数据,也将消耗掉一个序号。

第二次挥手:B 收到连接释放报文段后立即发出确认,确认号是 ack = u + 1,而这个报文段自己的序号是 v(等于 B 前面已经传送过的数据的最后一个字节的序号加1),然后 B 就进入 CLOSE-WAIT(关闭等待)状态。TCP 服务端进程这时应通知高层应用进程,因而从 A 到 B 这个方向的连接就释放了,这时的 TCP 连接处于半关闭(half-close)状态,即 A 已经没有数据要发送了,但 B 若发送数据,A 仍要接收。也就是说,从 B 到 A 这个方向的连接并未关闭,这个状态可能会持续一段时间。A 收到来自 B 的确认后,就进入 FIN-WAIT-2(终止等待2)状态,等待 B 发出的连接释放报文段。

第三次挥手:若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。这时 B 发出的连接释放报文段必须使 FIN = 1。假定 B 的序号为 w(在半关闭状态,B 可能又发送了一些数据)。B 还必须重复上次已发送过的确认号 ack = u + 1。这时 B 就进入 LAST-ACK(最后确认)状态,等待 A 的确认。

第四次挥手:A 在收到 B 的连接释放报文后,必须对此发出确认。在确认报文段中把 ACK 置 1,确认号 ack = w + 1,而自己的序号 seq = u + 1(前面发送的 FIN 报文段要消耗一个序号)。然后进入 TIME-WAIT(时间等待) 状态。请注意,现在 TCP 连接还没有释放掉。必须经过时间等待计时器设置的时间 2MSL(MSL:最长报文段寿命)后,A 才能进入到 CLOSED 状态,然后撤销传输控制块,结束这次 TCP 连接。当然如果 B 一收到 A 的确认就进入 CLOSED 状态,然后撤销传输控制块。所以在释放连接时,B 结束 TCP 连接的时间要早于 A。

15、为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

1. 为了保证 A 发送的最后一个 ACK 报文段能够到达 B。这个 ACK 报文段有可能丢失,因而使处在 LAST-ACK 状态的 B 收不到对已发送的 FIN + ACK 报文段的确认。B 会超时重传这个 FIN+ACK 报文段,而 A 就能在 2MSL 时间内(超时 + 1MSL 传输)收到这个重传的 FIN+ACK 报文段。接着 A 重传一次确认,重新启动 2MSL 计时器。最后,A 和 B 都正常进入到 CLOSED 状态。如果 A 在 TIME-WAIT 状态不等待一段时间,而是在发送完 ACK 报文段后立即释放连接,那么就无法收到 B 重传的 FIN + ACK 报文段,因而也不会再发送一次确认报文段,这样,B 就无法按照正常步骤进入 CLOSED 状态。

2. 防止已失效的连接请求报文段出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个连接中不会出现这种旧的连接请求报文段。

16、为什么第二次跟第三次不能合并, 第二次和第三次之间的等待是什么?

当服务器执行第二次挥手之后, 此时证明客户端不会再向服务端请求任何数据, 但是服务端可能还正在给客户端发送数据(可能是客户端上一次请求的资源还没有发送完毕),所以此时服务端会等待把之前未传输完的数据传输完毕之后再发送关闭请求。

17、保活计时器的作用?

除时间等待计时器外,TCP 还有一个保活计时器(keepalive timer)。设想这样的场景:客户已主动与服务器建立了 TCP 连接。但后来客户端的主机突然发生故障。显然,服务器以后就不能再收到客户端发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就需要使用保活计时器了。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两个小时。若两个小时都没有收到客户端的数据,服务端就发送一个探测报文段,以后则每隔 75 秒钟发送一次。若连续发送 10个 探测报文段后仍然无客户端的响应,服务端就认为客户端出了故障,接着就关闭这个连接。

18、TCP 协议是如何保证可靠传输的?

1. 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时 TCP 发送数据端超时后会重发数据;

2. 对失序数据包重排序:既然 TCP 报文段作为 IP 数据报来传输,而 IP 数据报的到达可能会失序,因此 TCP 报文段的到达也可能会失序。TCP 将对失序数据进行重新排序,然后才交给应用层;

3. 丢弃重复数据:对于重复数据,能够丢弃重复数据;

4. 应答机制:当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

5. 超时重发:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

6. 流量控制:TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP 使用的流量控制协议是可变大小的滑动窗口协议。

19、谈谈对停止等待协议的理解?

停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。主要包括以下几种情况:无差错情况、出现差错情况(超时重传)、确认丢失和确认迟到、确认丢失和确认迟到。

20、谈谈对 ARQ 协议的理解?

自动重传请求 ARQ 协议
停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求 ARQ。

连续 ARQ 协议
连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。

21、谈谈你对滑动窗口的了解?

TCP 利用滑动窗口实现流量控制的机制。滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

22、谈下你对流量控制的理解?

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

23、谈下你对 TCP 拥塞控制的理解?使用了哪些算法?

拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。TCP 的拥塞控制采用了四种算法,即:慢开始、拥塞避免、快重传和快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如:主动队列管理 AQM),以减少网络拥塞的发生。

慢开始:
慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd 初始值为 1,每经过一个传播轮次,cwnd 加倍。

拥塞避免:
拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间 RTT 就把发送方的 cwnd 加 1。

快重传与快恢复:
在 TCP/IP 中,快速重传和快恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和快恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

24、什么是粘包?

在进行 Java NIO 学习时,可能会发现:如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况。

1. TCP 是基于字节流的,虽然应用层和 TCP 传输层之间的数据交互是大小不等的数据块,但是 TCP 把这些数据块仅仅看成一连串无结构的字节流,没有边界;

2. 从 TCP 的帧结构也可以看出,在 TCP 的首部没有表示数据长度的字段。

基于上面两点,在使用 TCP 传输数据时,才有粘包或者拆包现象发生的可能。一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。接收端收到了两个数据包,但是这两个数据包要么是不完整的,要么就是多出来一块,这种情况即发生了拆包和粘包。拆包和粘包的问题导致接收端在处理的时候会非常困难,因为无法区分一个完整的数据包。

25、TCP 黏包是怎么产生的?

发送方产生粘包

采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态(一次连接发一次数据不存在粘包),双方在连接不断开的情况下,可以一直传输数据。但当发送的数据包过于的小时,那么 TCP 协议默认的会启用 Nagle 算法,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已经是粘包的状态了。

接收方产生粘包

接收方采用 TCP 协议接收数据时的过程是这样的:数据到接收方,从网络模型的下方传递至传输层,传输层的 TCP 协议处理是将其放置接收缓冲区,然后由应用层来主动获取(C 语言用 recv、read 等函数);这时会出现一个问题,就是我们在程序中调用的读取数据函数不能及时的把缓冲区中的数据拿出来,而下一个数据又到来并有一部分放入的缓冲区末尾,等我们读取数据时就是一个粘包。(放数据的速度 > 应用层拿数据速度)

26、怎么解决拆包和粘包?

分包机制一般有两个通用的解决方法:

1. 特殊字符控制;

2. 在包头首都添加数据包的长度。

如果使用 netty 的话,就有专门的编码器和解码器解决拆包和粘包问题了。

tips:UDP 没有粘包问题,但是有丢包和乱序。不完整的包是不会有的,收到的都是完全正确的包。传送的数据单位协议是 UDP 报文或用户数据报,发送的时候既不合并,也不拆分。

27、你对 HTTP 状态码有了解吗?

1XX 信息
1. 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。

2XX 成功
1. 200 OK

2. 204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。

3. 206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。

3XX 重定向
1. 301 Moved Permanently :永久性重定向;

2. 302 Found :临时性重定向;

3. 303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。

4. 304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。

5. 307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

4XX 客户端错误
1. 400 Bad Request :请求报文中存在语法错误。

2. 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。

3. 403 Forbidden :请求被拒绝。

4. 404 Not Found

5XX 服务器错误
1. 500 Internal Server Error :服务器正在执行请求时发生错误;

2. 503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

28、HTTP 状态码 301 和 302 代表的是什么?有什么区别?

301,302 都是 HTTP 状态的编码,都代表着某个 URL 发生了转移。

区别:

301 redirect: 301 代表永久性转移(Permanently Moved)

302 redirect: 302 代表暂时性转移(Temporarily Moved)

29、forward 和 redirect 的区别?

Forward 和 Redirect 代表了两种请求转发方式:直接转发和间接转发。

直接转发方式(Forward):客户端和浏览器只发出一次请求,Servlet、HTML、JSP 或其它信息资源,由第二个信息资源响应该请求,在请求对象 request 中,保存的对象对于每个信息资源是共享的。

间接转发方式(Redirect):实际是两次 HTTP 请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个 URL 发出请求,从而达到转发的目的。

举个通俗的例子:

直接转发就相当于:“A 找 B 借钱,B 说没有,B 去找 C 借,借到借不到都会把消息传递给 A”;

间接转发就相当于:"A 找 B 借钱,B 说没有,让 A 去找 C 借"。

30、HTTP 方法有哪些?

客户端发送的 请求报文 第一行为请求行,包含了方法字段。

1. GET:获取资源,当前网络中绝大部分使用的都是 GET;

2. HEAD:获取报文首部,和 GET 方法类似,但是不返回报文实体主体部分;

3. POST:传输实体主体

4. PUT:上传文件,由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。

5. PATCH:对资源进行部分修改。PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。

6. OPTIONS:查询指定的 URL 支持的方法;

7. CONNECT:要求在与代理服务器通信时建立隧道。使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

8. TRACE:追踪路径。服务器会将通信路径返回给客户端。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输。通常不会使用 TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)。

31、说下 GET 和 POST 的区别?

GET 和 POST 本质都是 HTTP 请求,只不过对它们的作用做了界定和适配,并且让他们适应各自的场景。本质区别:GET 只是一次 HTTP请求,POST 先发请求头再发请求体,实际上是两次请求。

1. 从功能上讲,GET 一般用来从服务器上获取资源,POST 一般用来更新服务器上的资源;

2. 从 REST 服务角度上说,GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变;

3. 从请求参数形式上看,GET 请求的数据会附在 URL 之后,即将请求数据放置在 HTTP 报文的 请求头 中,以 ? 分割 URL 和传输数据,参数之间以 & 相连。特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用 BASE64 加密,得出如:%E4%BD%A0%E5%A5%BD,其中 %XX 中的 XX 为该符号以 16 进制表示的 ASCII);而 POST 请求会把提交的数据则放置在是 HTTP 请求报文的 请求体 中;

4. 就安全性而言,POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而且 POST 请求参数则被包装到请求体中,相对更安全;

5. 从请求的大小看,GET 请求的长度受限于浏览器或服务器对 URL 长度的限制,允许发送的数据量比较小,而 POST 请求则是没有大小限制的。

32、在浏览器中输入 URL 地址到显示主页的过程?

1. DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地址:具体过程包括浏览器搜索自身的 DNS 缓存、搜索操作系统的 DNS 缓存、读取本地的 Host 文件和向本地 DNS 服务器进行查询等。对于向本地 DNS 服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;

2. TCP 连接:浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起三次握手;

3. 发送 HTTP 请求:TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求;

4. 服务器处理请求并返回 HTTP 报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;

5. 浏览器解析渲染页面:浏览器解析并渲染视图,若遇到对 js 文件、css 文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

6. 连接结束。

33、DNS 的解析过程?

1. 主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。

2. 本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的 IP 地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,本地域名服务器得到了所要解析的 IP 地址或报错,然后把这个结果返回给发起查询的主机。

34、谈谈对域名缓存的了解?

为了提高 DNS 查询效率,并减轻服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如:每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。

不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。

35、谈下对 HTTP 长连接和短连接的理解,分别应用于哪些场景?

在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如:JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话。

而从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码:
Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如:Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

36、谈下 HTTP 1.0 和 1.1、2.0 的主要变化?

HTTP1.1 的主要变化:

1. HTTP1.0 经过多年发展,在 1.1 提出了改进。首先是提出了长连接,HTTP 可以在一次 TCP 连接中不断发送请求。

2. 然后 HTTP1.1 支持只发送 header 而不发送 body。原因是先用 header 判断能否成功,再发数据,节约带宽,事实上,post 请求默认就是这样做的。

3. HTTP1.1 的 host 字段。由于虚拟主机可以支持多个域名,所以一般将域名解析后得到 host。

HTTP2.0 的主要变化:

1. HTTP2.0 支持多路复用,同一个连接可以并发处理多个请求,方法是把 HTTP数据包拆为多个帧,并发有序的发送,根据序号在另一端进行重组,而不需要一个个 HTTP请求顺序到达;

2. HTTP2.0 支持服务端推送,就是服务端在 HTTP 请求到达后,除了返回数据之外,还推送了额外的内容给客户端;

3. HTTP2.0 压缩了请求头,同时基本单位是二进制帧流,这样的数据占用空间更少;

4. HTTP2.0 适用于 HTTPS 场景,因为其在 HTTP和 TCP 中间加了一层 SSL 层。

37、HTTPS 的工作过程?

1. 客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了;

2. 服务器从中选出一套加密算法和 hash 算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构;

3. 客户端收到网站的证书之后要做下面的事情:

3.1 验证证书的合法性;
3.2 果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密;
3.3 用约定好的 hash 算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器。

4. 服务器接收到客户端传送来的信息,要做下面的事情:

4.1 用私钥解析出密码,用密码解析握手消息,验证 hash 值是否和浏览器发来的一致;
4.2 使用密钥加密消息;

5. 如果计算法 hash 值一致,握手成功。

38、HTTP 和 HTTPS 的区别?

1. 开销:HTTPS 协议需要到 CA 申请证书,一般免费证书少且期限短,需要交费;

2. 资源消耗:HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 ssl 加密传输协议,需要消耗更多的 CPU 和内存资源;

3. 端口不同:HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443;

4. 安全性:HTTP 的连接很简单,是无状态的;HTTPS 协议是由 TSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

39、HTTPS 的优缺点?

优点:
1. 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

2. HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性;

3. HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

缺点:
1. HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;

2. HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

3. SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用;

4. SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗;

5. HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

40、什么是数字签名?

为了避免数据在传输过程中被替换,比如黑客修改了你的报文内容,但是你并不知道,所以我们让发送端做一个数字签名,把数据的摘要消息进行一个加密,比如 MD5,得到一个签名,和数据一起发送。然后接收端把数据摘要进行 MD5 加密,如果和签名一样,则说明数据确实是真的。

41、什么是数字证书?

对称加密中,双方使用公钥进行解密。虽然数字签名可以保证数据不被替换,但是数据是由公钥加密的,如果公钥也被替换,则仍然可以伪造数据,因为用户不知道对方提供的公钥其实是假的。所以为了保证发送方的公钥是真的,CA 证书机构会负责颁发一个证书,里面的公钥保证是真的,用户请求服务器时,服务器将证书发给用户,这个证书是经由系统内置证书的备案的。

42、什么是对称加密和非对称加密?

对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方。非对称加密指使用一对非对称密钥,即:公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性。但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。


详解应用层协议


应用层
TCP/IP 模型的下三层,分别是网络接入层、网络层和传输层。它们都是为应用层服务的,传输应用层的各种数据,现在我们就来看看最高层的应用层。在 TCP/IP 模型中,应用层提供的服务相当于 OSI 模型的应用层、表示层和会话层的服务总和。不仅包含了管理通信连接的会话层功能、数据格式转换的表示层功能,还包括主机间交互的应用层功能。


应用层的目的是向应用程序提供网络接口,直接向用户提供服务。相比于下层的网络协议,应用协议要常见得多,可能大家都听过 HTTP 、HTTPS 、SSH 等应用层协议。


TCP/IP 模型中应用层位于传输层之上,传输层的端口号用于标识数据所对应的应用层协议。也就是说,有端口号的协议都是应用层协议。应用协议是终端设备之间的应用通信规则。应用之间交互的信息叫消息,应用协议定义这些消息的格式以及消息的控制或操作的规则。


应用协议的通信方式可分为两类:
服务器和客户端模型
P2P 模型

在服务器和客户端模型中,始终公开固定 IP 地址的主机为其它主机的应用程序提供服务,请求服务的主机之间不会互相通信。这些为其它主机提供服务的终端设备称为服务器,那些请求服务的主机则称为客户端。大多数应用层协议,都是这种模型。


在 P2P 模型中,没有特定的服务器或客户端,这些设备上安装的应用程序,可以在主机间建立对等连接,既可以提供服务,也可以接受服务。通常是大流量的应用程序采用 P2P 模型,比如:下载器等。


开发应用程序时,为了实现相应的功能和目的,可以使用现有的应用协议,也可以自己定义一个新的应用协议。同时,应用程序可以直接使用传输层以下的网络传输服务,开发者只需要关心选择哪种应用协议、如何开发即可,而不用考虑数据是如何传输到目的地。这也是 TCP/IP 分层模型的特点。

应用程序有很多,包括 Web 浏览器、电子邮件、远程登录、文件传输、网络管理等。这些应用程序都会使用应用协议进行通信,应用协议正是为了实现应用程序的功能而设计和创造的。

远程登录
网络设备的管理方式,分为本地管理和远程管理。远程管理是从本地主机登录到网络对端设备,向网络对端的设备发送管理数据,以实现设备管理的操作方式。通过远程管理,不仅可以直接使用主机上的应用,还可以对主机进行参数设置。远程登录主要使用 Telnet 和 SSH 两种协议管理网络设备。

Telnet
在实际工作中,除了个别无法远程管理设备外,大多会采用远程管理的方式,来管理设备的配置文件和系统文件。对比本地管理,远程管理不受物理位置限制,连上网络就可以对世界另一端的设备进行操控,更省去了插拔设备线缆、终端设置的过程,可以通过一个远程应用同时管理大量的网络设备。

Telnet 协议定义了一台设备通过 IP 网络向远端设备发起明文管理连接的通信标准,可以在一台设备上通过 Telnet 协议与一台远端设备建立管理连接,并对远端设备实施配置和监控,这种方式的体验与本地登录设备并无区别。发起管理的设备为 Telnet 客户端,被管理的设备是 Telnet 服务器。因此,Telnet 协议是一个典型的服务器和客户端模型的应用层协议。


Telnet 协议通过 TCP 协议建立服务器和客户端的一条连接,并通过这条连接向服务器发送用户名、密码和命令。Telnet 协议使用的是 TCP 23 端口,表示客户端在发起 Telnet 连接时,默认连接服务器的 TCP 23 号端口。

当 Telnet 客户端输入命令后,这些命令通过 TCP 连接发送到 23 号端口,监听请求的守护进程 Telnetd 收到后,将命令发送给 Shell ,Shell 为操作系统进行命令解释,然后操作系统执行 Telnet 客户端发出的命令。同理,操作系统按照相反的顺序,将命令执行的结果发回给 Telnet 客户端。

Telnet 协议实现了远程命令传输,但是客户端和服务器跨越不可靠的公共网络时,在命令传输过程中可以截获 Telnet 通信的所有数据,然后使用截获的用户名和密码来通过 Telnet 服务器的身份认证,并登录到设备上对配置文件进行修改。


Telnet 协议存在重大安全隐患,不推荐在实验室之外的环境使用。

SSH
SSH 协议全程是安全外壳协议,目的就是为了取代 Telnet ,SSH 是加密的远程登录协议,提供更加安全的远程登录服务。使用 SSH 后会加密通信内容。即使信息被截获,由于无法解密,也无法了解数据的真正内容。


SSH 协议常用版本是 SSHv2 ,SSH 客户端通过 SSHv2 协议与 SSH 服务器建立一条 TCP 的加密信道,建立这条安全信道的方式是让客户端使用服务器的 RSA 公钥来验证 SSH 服务器的身份。SSH 协议默认使用 TCP 22 端口。

如果客户端成功验证了服务器的身份,它们之间就会创建出一个会话密钥,并用双方协商出来的加密算法和会话密钥,对这个信道传输的数据进行加密。这样,两台设备之间就建立了一条安全的信道,使用这条安全信道发送密码,密码以密文的形式传输,通过服务器的身份认证。SSH 就是通过这种方式建立加密信道,确保 SSH 服务器,也就是被管理设备的 Shell 免遭非法用户操作。

文件传输
除了远程登录,我们还需要从远端设备传输文件,文件传输协议提供的应用服务可以满足我们的需求。FTP 是网络上文件传输的标准协议,其使用 TCP 作为传输协议,支持用户的登录认证和访问权限的控制。另一种常见的文件传输协议是 TFTP 协议,TFTP 是一种简单的文件传输协议,不支持用户的登录认证,也没有复杂的命令。TFTP 使用 UDP 作为传输协议,并有重传机制。


FTP
FTP 用于服务器和客户端之间传输文件,是 IP 网络上传输文件的通用协议。FTP 采用客户端和服务器的模式,使用 TCP 协议提供可靠传输。FTP 可以对登录服务器的用户名和密码进行验证,允许客户端指定文件的传输类型,并且可以设置文件的传输权限。

FTP 使用两条 TCP 连接实现文件传输。一条是 FTP 控制连接,用来控制管理;另一条是 FTP 数据连接,用于数据传输。FTP 控制连接用于传输 FTP 控制命令和命令执行的应答信息,比如登录用户名和密码的验证、发送文件的名称、发送方式的设置。这条连接在整个 FTP 会话过程中一直保持打开,通过 ASCII 码字符串发送请求和接收应答。在控制连接上无法发送数据,而 FTP 数据连接用于文件和文件列表的传输,仅在需要传输数据时建立数据连接,数据传输完毕后终止。


FTP 控制连接使用的是 TCP 21 号端口,也是 FTP 服务器的侦听端口,等待客户端的连接。在 TCP 21 号端口进行文件 GET( RETR )、PUT( STOR ),以及文件表( LIST )等操作时,每次都会建立一个用于数据传输的数据连接。数据和文件表的传输正式在这个数据连接上进行的。

数据连接的 TCP 连接通常使用端口 20 。也可以使用 PORT 命令修改为其它值。相同的一个文件,不同的操作系统可能有不同的存储方式。为了确保文件能够准确的传送给对方,常用 2 中传输模式:

ASCII 模式
ASCII 模式是默认的文件传输模式。发送方把本地文件转换成标准的 ASCII 码,然后在网络中传输;接收方收到文件后,根据自己的文件存储方式,把它转换成本地文件。ASCII 文件传输模式通常用于传输文本文件。

二进制流模式
二进制流模式也称为图像文件传输模式。发送方不做任何转换,把文件按照比特流的方式进行传输。二进制文件类型通常用于传送程序文件。

在 FTP 数据连接过程中,有两种数据传输方式:主动方式和被动方式。FTP 主动传输方式,也称为 PORT 方式。采用主动方式建立数据连接时,FTP 客户端会通过 FTP 控制连接向 FTP 服务器发送 PORT 命令,PORT 命令携带参数:A1 、A2 、A3 、A4 、P1 、P2 ,其中 A1 、A2 、A3 、A4 表示需要建立数据连接的主机 IP 地址,而 P1 和 P2 表示客户端用于传输数据的临时端口号,临时端口号的数值为 256*P1+P2 。当需要传输数据时,服务器通过 TCP 端口号 20 与客户端提供的临时端口建立数据传输通道,完成数据传输。在整个过程中,由于服务器在建立数据连接时主动发起连接,因此被称为主动模式。


如果客户端在防火墙内部,主动方式可能会有问题,因为客户端的端口号是随机的,防火墙并不知道。默认安全策略,防火墙只会允许外部主机访问部分内部已知端口,阻断对内部随机端口的访问,从而无法建立 FTP 数据连接。这时,就需要使用 FTP 被动方式来进行文件传输。

被动方式也被称为 PASV 方式。FTP 控制通道建立后,希望通过被动方式建立数据传输通道的 FTP 客户端会利用控制通道向 FTP 服务器发送 PASV 命令,告诉服务器进入被动方式传输。服务器选择临时端口号并告知客户端,命令参数和主动传输方式一致。当需要传输数据时,客户端主动与服务器的临时端口建立数据传输通道,并完成数据传输。在整个过程中,服务器是被动接收客户端的数据连接,所以被称为被动模式。


采用被动方式时,两个连接都由客户端发起。一般防火墙不会限制内部的客户端发起的连接,这样就解决了主动方式下的问题。

TFTP
TFTP 也是用于服务器和客户端之间传输文件的,对比 FTP ,TFTP 没有复杂的交互接口和认证控制,适用于不需要复杂交互的网络环境。

TFTP 采用客户端和服务器的模式,使用 UDP 协议传输,服务器使用端口号 69 侦听 TFTP 连接。由于 UDP 不能提供可靠的数据传输,因此 TFTP 使用超时重传机制确保数据正确发送。TFTP 只能提供简单的文件传输能力,包括文件的上传和下载。不支持文件目录功能,也不能对用户的身份进行验证和授权。


TFTP 协议传输是由客户端发起的。当需要下载文件时,客户端向 TFTP 服务器发送一个读请求,然后从服务器接收数据,并向服务器发送确认;当需要上传文件时,由客户端向服务器发送一个写请求,然后向服务器发送数据,并接收服务器的确认。


与 FTP 类似,TFTP 传输文件有两种模式:netascii 模式和 octet 模式。octet 传输模式对应 FTP 的二进制流模式,用于传输程序文件;netascii 模式对应 FTP 的 ASCII 模式,用于传输文本文件。

TFTP 进行文件传输时,将传输文件看成是由多个连续的文件块组成。每一个 TFTP 数据报文中包含一个文件块,同时对应一个文件块编号。每次发完一个文件块后,就等待对方的确认,确认时指明块编号。发送方发完数据后,如果在规定时间内没收到对端的确认,那么发送方就会重新发送数据。发送确认的一方如果在规定时间内没收到下一个文件块数据,则重发确认报文。这种方式可以确保文件的传送不会因某一个数据的丢失而失败。

每次 TFTP 发送的数据报文中包含的文件块大小固定为 512 字节,如果文件长度恰好是 512 字节的整数倍,那么在文件传送完毕后,发送方还必须在最后发送一个不包含数据的报文,用来表示文件传输完毕。如果文件长度不是 512 字节的整数倍,那么最后传送的数据报文包含的文件块肯定小于 512 字节,正好作为文件结束的标志。

电子邮件
顾名思义,就是指网络上的邮政。通过电子邮件,可以发送文字内容、图片,还可以发送报表数据等所有计算机可以存储的信息。电子邮件不受距离限制,可以与世界上任一的互联网用户互相联系。由于使用简易、投递迅速、易于保存、不受距离限制等特点,使得电子邮件已经成为人们普遍使用的一种应用。

通信架构
电子邮件在几十年的发展过程中出现了明显的变化,从原始的发送方电脑直接向接收方电脑发送电子邮件,演变成收发双方都使用邮件服务器代为收发邮件。通过这种方式,电子邮件通信不再依赖接收方当前是否在线,而电子邮件的通信过程由简单的发送方到接收方,演变成发送方电脑到发送方邮件服务器,发送方邮件服务器到接收方邮件服务器,以及接收方邮件服务器到接收方电脑的三个通信过程。并且参与通信的四方都不是直接相连,而是分别独立连接到互联网中。这个架构中,邮件发送方和接收方使用的电脑称为用户代理。


邮件地址
使用电子邮件时,需要拥有一个地址,这个地址叫做邮件地址,也叫邮箱地址。它相当于通信地址和姓名,电子邮件如下:
networkfox@qq.com

networkfox 表示用户的名称,同一个通信地址内,名称必须是唯一的,不能出现重复;@ 表示分隔符;qq.com 是用户邮箱的邮件接收服务器的域名。

电子邮件的发送地址由 DNS 管理。DNS 中注册了邮件地址和对应邮件服务器的域名。这些映射信息被称为 MX 记录。比如:qq.com 的 MX 记录中指定了 mail.qq.com。那么任何发送给 qq.com 结尾的邮件都被发送到 mail.qq.com 服务器。就这样,根据 MX 记录中指定的邮件服务器,可以管理不同邮件地址与特定邮件服务器之间的映射关系。

SMTP 协议
提供电子邮件服务的协议叫做 SMTP 。SMTP 用于收发双方的邮件服务器之间,而不是用户代理和邮件服务器之间的通信方式。在实际使用中,发送方用户代理与发送方服务器之间也常采用 SMTP 协议。


SMTP 为了实现高效发送邮件内容,在传输层使用了 TCP 协议,端口号是 25 。在一台邮件服务器向另一台邮件服务器发送邮件时,首先向对方的 TCP 25 端口发起一条连接。然后利用这条 TCP 连接发送控制消息和数据。


尽管 SMTP 协议的逻辑简单,也足以顺利完成邮件的传输工作,但难免存在一些安全缺陷:
SMTP 传输的邮件是明文的形式,没有提供数据加密机制,可以看到邮件传输的具体内容,用户信息的机密性无法得到保障。
SMTP 没有提供任何认证机制,即使使用了伪造的发件人邮件地址也无法识别,会出现冒名顶替的安全问题。

漫天的广告邮件和包含钓鱼链接的垃圾邮件成为日益严重的问题。为了修正 SMTP 出现的问题,IETF 定义了扩展的 SMTP ,即 ESMTP 。ESMTP 提供的扩展功能中包括认证机制和加密机制等。

在整个邮件传输的过程中,SMTP/ESMTP 协议定义了邮件服务器之间的消息传输方式。在接收服务器收到电子邮件后,接收方(用户代理)是如何访问邮件则需要其它的协议来处理。

POP3 协议
电子邮件通过 SMTP 协议到达接收方服务器,个人电脑不可能长期处于开机状态,用户希望一开机就能收到邮件,然而 SMTP 没有这种功能。为了解决这个问题,就引入了 POP3 协议。POP3 协议是用于接收电子邮件的协议。发送端的邮件使用 SMTP 协议将电子邮件转发给一直在线的 POP3 服务器。客户端再根据 POP3 协议从 POP3 服务器接收邮件。这个过程中,为了防止别人盗取邮件内容,还要进行用户认证。

POP3 协议和 SMTP 协议一样,是基于 TCP 的应用层协议,使用 TCP 110 端口连接邮件服务器。接收方的邮件客户端程序首先使用 TCP 连接到 POP3 服务器的 TCP 端口 110 ;再进行用户认证、邮件列表查询、邮件下载、邮件删除等操作;操作完成后,客户端与邮件服务器之间再断开 TCP 连接。


POP3 仅负责邮件的下载,邮件从客户端上传到邮件服务器由 SMTP  协议完成。

IMAP 协议
POP3 协议的邮件客户端能够在邮件服务器上执行的操作很少,而且邮件要下载到客户端本地,而不保留在邮件服务器,实际使用时很不方便。目前使用更广泛的接收电子邮件的协议是 IMAP 。在 IMAP 中邮件则由服务器进行管理。


使用 IMAP 时,不必从服务器上下载所有的邮件也可以查看。由于 IMAP 是在服务器端处理 MIME 信息,它可以实现邮件附件的选择性下载功能。比如:一封邮件有 5 个附件时,可以只下载其中的 3 个附件。IMAP 还会在服务器上对 “ 已读/未读 ” 信息和邮件分类进行管理,所以在不同的电脑上打开邮箱,也能保持同步,使用起来非常方便。

WWW
万维网( WWW )是将互联网的信息以超文本形式展现的系统,也叫做 Web 。可以显示 WWW 信息的客户端软件叫做 Web 浏览器,有时简称为浏览器。目前常用的 Web 浏览器包括微软的 Internet Explorer 、谷歌公司的 Google Chrome 、腾讯公司的 QQ 浏览器以及 Apple 公司的 Safari 等。

使用浏览器,我们不需要关心信息保存在哪个服务器,只需轻轻点击鼠标,就可以访问页面上的链接并打开相关信息。


通过浏览器进行访问后,显示在浏览器上的内容叫做 Web 页。访问一个网站时看到的第一个页面称为首页(又称为主页)。很多公司的主页地址形式如下:
http://www.公司名称.com.cn

这类主页中通常有公司概况、产品信息、招聘信息等内容。我们可以点击这些标题的图标或链接,就可以跳转到对应的页面上。这些页面上的信息不仅仅是文字内容,还有图片或动画,甚至是声音或其它程序等各种各样的信息。我们不但可以通过 Web 页获取信息,还可以自己制作 Web 页向全世界发布信息。

WWW 有 3 个重要的概念,它们分别是访问信息的方式和位置( URI )、信息的表现形式( HTML )以及信息传输( HTTP )等操作。

URI
URI 用于标识资源,是一种高效的识别码,被应用于主页地址、电子邮件、电话号码等。

http://www.rfc-editor.org/rfc/rfc4395.txt

http://www.ietf.org:80/index.html

http://localhost:321

通常主页地址被叫做 URL 。URL 常用来表示网络资源的具体位置。但是 URI 不限于标识互联网资源,可以作为所有资源的标识符。简单说就是 URL 是 URI 的一个子集。

WWW 主要使用 http 和 https 表示 Web 页的位置和访问 Web 页的方法。http 的具体格式如下:
http://主机名/路径http://主机名:端口号/路径http://主机名:端口号/路径?访问内容#部分信息

其中主机名可以用域名或 IP 地址表示,端口号表示传输端口号。省略端口号时,表示使用 http 的默认端口 80 。路径是指主机上信息的位置,访问内容表示要传给 CGI 的信息,部分信息表示页面当中的位置等。

这种表示方法可以标识互联网中特定的数据。由于 http 展现的数据随时都有可能发生变化,所以记住页面的 URI( URL ),也不能保证下次能够访问到这个页面。

HTML
HTML 是用来描述 Web 页的一种语言。它可以指定浏览器中显示的文字、文字的大小和颜色,还可以对图像、动画或音频进行设置。

在页面中 HTML 不仅可以文字或图片附加链接,点击链接时还可以呈现链接所指的内容。互联网中任何一个 WWW 服务器中的信息都可以以链接的方式展现。也可以说是 WWW 的数据表现协议。只要是用 HTML 展现的数据,即使是在不同的计算机上,效果基本上是一样的。

HTTP
当用户在浏览器的地址栏里输入 Web 页的 URL 后,HTTP 的处理就开始了。HTTP 默认使用 80 端口。它的工作机制,首先是客户端向服务器的 80 端口建立一个 TCP 连接,然后在这个 TCP 连接上进行请求和应答以及数据报文的发送。


HTTP 中常用的有两个版本,一个是 HTTP 1.0 ,另一个是 HTTP 1.1 。在HTTP 1.0 中每一个命令和应答都会触发一次 TCP 连接的建立和断开。而从 HTTP 1.1 开始,允许在一个 TCP 连接上发送多个命令和应答,这种方式也叫保持连接( keep-alive )。可以大量减少 TCP 连接的建立和断开操作,提高传输效率。


网络管理应用
很多应用层协议广为人知,是因为我们在日常上网的过程中,会大量使用与这些应用协议有关的应用程序,这类应用协议称为终端用户应用协议;另外还有一些应用协议在网络中广泛使用,但我们对它们却少有听闻,最多在网络无法正常使用时,才会意识到它们的存在,这类应用层协议称为系统应用协议。在日常工作中,网络工程师经常使用到的系统应用协议有 DHCP 协议和 DNS 协议。