基础网络概念
文章目录
OSI 七层协定
设备间通讯才能构成网络,而为了规范其通讯的基础规范,就形成了OSI 七层协定(Open System Interconnection)的概念。
依据其定义,越接近硬件层的为底层(layer 1),越接近应用层的则是最高层(layer 7),不论是接收端还是发送端,每一阶层只认识对方的同一阶层资料。
而每一层都有自己独特的表头资料,在通讯时发送端自上而下,从应用层到硬件层,一层一层将数据打包,并且将自己的表头资料封装其中,然后发送出去。
接收端接收到数据之后,又依次自下而上,从硬件层解包识别对应表头资料,将数据一层一层解包传输给其定义的阶层。
其中第二层比较特殊,,因为第二层主要是位于软件封包(packet)以及硬体讯框(frame)中间的一个阶层,它必须要将软件包装的包裹放入到硬体能够处理的包裹中,因此这个阶层又分为两个子层在处理相对应的数据,所以第二层而尾端还会有一个检查码。
每一阶层负责内容如下:
分层 | 负责内容 |
---|---|
Physical Layer (1)
实体层 |
由于网络媒体只能传输0与1这种位元串,因此实体层必须定义所使用的媒体设备的电压与讯号等,同
时还必须了解数据转换成位元数据串的编码方式,最后连接实体媒体并传送/接收位元串。 |
Data-Link Layer (2)
数据链接层 |
这一层分为两个子层在进行数据转换,在偏硬件部分,主要负责MAC(Media AccessControl),称这
个 数据包裹为MAC讯框(frame),MAC是网络媒体所处理的主要资 料包裹,这也是最终被实体层编 码成位元串的数据。 至于偏软件的部分则是由逻辑链接层(logical link control,LLC)控制,主要处理数据与MAC格式的 转换。 |
Network Layer (3)
网络层 |
主要定义设备之间的连线建立、终止与维持,数据封包的传输络径选择,还有IP、络由等信息。 |
Transport Layer (4)
传输层 |
主要定义了发送端与接收端的连线技术(TCP/UDP等),同时包括该技术的封包格式,数据封包的传输、
流程的控制、传输过程的侦测检查与复原重新传输等等,以确保各个封包可以正确无误 的到达目的端。 |
Session Layer (5)
会话层 |
主要定义了两个地址之间连线通道的连接与断开,此外,还可以建立应用程序之会话、提供其他加强型
服务,如网落管理、签到签退、会话控制等等,以判定网络服务建立连线的确认。 |
Presentartion Layer (6)
表现层 |
主要定义网络服务或程序之间的数据格式转换,将数据转换成网络的标准格式,包括数据的加解密也是
在这个层次处理。 |
Application Layer (7)
应用层 |
应用层本身并不属于应用程序所有,而是定义应用程序如何进入此层的沟通介面,以将数据接收或传送
给应用程序,最终展示给使用者。 |
事实上,OSI七层协定只是一个参考模型(model),目前网络的主流应用中并没有将其使用。因为OSI的定义非常严谨,因而编写程序相对麻烦,所以主流是使用相对其简化的TCP/IP协定。
TCP/IP
其实TCP/IP也是使用OSI七层协定的观念,所以具有类似的分层架构,只是将其简化为四层,在结构上没有那么严谨,编写程序相对比较容易。后来在1990年代由于email、www的流行,造成TCP/IP这个标准为大家所接受。
TCP/IP与OSI的相关性与区别:
OSI七层协定 | TCP/IP | 相关通讯协定与目标 | |||
---|---|---|---|---|---|
应用层
表现层 会话层 |
应用层 | HTTP | FTP | SMTP | |
POP3 | NFS | …… | |||
传输层 | 传输层 | TCP | UDP | …… | |
网络层 | 网络层 | IP | ICMP | …… | |
数据链接层
实体层 |
链接层 | LAN:Ethernet,Token Ring | ARP…… | ||
WAN:Modem,ISDN,ATM,Serial…… |
从上图我们可以直观的发现:
- TCP/IP将应用层、表现层、会话层三层合成一个应用层,在应用层上面可以运作的程序协定有HTTP、SMTP、DNS等等。
- 传输层则没有变,不过依据传输的特性又将封包分为TCP及UDP格式。
- 网络层也没有变,主要提供了IP封包与到达IP目标的线路选择。
- 数据链接层与实体层合为一个链接层,包括定义硬体讯号、讯框转位元串的编码等等,因此主要与硬件有关。
TCP/IP连线状态:
- 应用程序阶段:应用程序将数据传输给应用层。
- 应用层:有应用层提供对应通讯协定,并给予一个应用层表头(标示应用程序),再向传输层丢去。
- 传输层:根据通讯协定选择传输协议,并封包为所对应格式,给予一个对应的传输协议表头,再向网络层丢去。
- 网络层:将传输协议的包裹封包进IP封包内,在给予一个IP表头(主要就是来源与目标IP),再向链接层丢去。
- 链接层:此时IP会依据CSMA/CD的标准,封包到MAC讯框中,并给予MAC表头,再转成位元串后,利用传输设备传送到远端设备。
到达目标设备后,再将此流程反过来依次解包,最终传输给目标应用程序。
双绞线与RJ-45接头
双绞线俗称网线,其内部为四股八根线,两两一组缠绕组成,根据不同的线芯、规格和缠绕标准又分为四类网线、五类网线、超五类网线、六类网线、超六类网线......
而影响最为明显的就是缠绕标准了,因为我们的数据都是靠电流来传输,而电流形成磁场,形形色色的磁场无处不在,它们又会对电流产生干扰,影响我们数据传输的质量与稳定,因此合适的线绞度与线质将决定了我们数据的稳定性与传输质量,目前的技术在数据传输中对干扰可是很敏感的,如果干扰过大,数据不能稳定传输,设备就不能正常传输数据,不过现在的设备在当前速率不能正常传输的时候,就会自动降低传输速率,来减小电流以降低干扰。
RJ-45接头俗称水晶头,其接线线序分为568A与568B,早期同设备连接需要使用交叉线,也就是一头用586A线序,另一头就要使用568B线序,因为早期同设备端口接收发送针脚定义是一样的,需要交叉之后,将对方设备传输线路定义到自己接收线路,所以就需要将几个线序换一下,形成交叉线才能用于同设备通讯。
平行线为两头线序相同,常用于不同设备间连接。
而现在的设备基本上都会智能识别信号,在设备内部自动完成针脚定义的转换,而不用再必须使用交叉线。
其线序为:
接头名称\线序 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
568A | 白绿 | 绿 | 白橙 | 蓝 | 白蓝 | 橙 | 白棕 | 棕 |
568B | 白橙 | 橙 | 白绿 | 蓝 | 白蓝 | 绿 | 白棕 | 棕 |
MAC的封装格式
MAC(Media Access Control, 介质访问控制)MAC地址是烧录在Network Interface Card(网卡,NIC)里的。MAC地址,也叫硬件地址,是由48比特长(6字节),16进制的数字组成。0-23位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区分了不同的厂家,是识别LAN(局域网)节点的标识,24-47位是由厂家自己分配。
每个MAC地址理论上在世界上都是唯一的(假冒伪劣除外),每个MAC地址都代表了一个设备,是硬件设备的唯一标识符。
而MAC封装主要就是将来源与目标的MAC信息封包于包裹中,目前MAC封包为网络中硬件能传输数据的最小单位了,其封包信息如下:
前导码
8Bytes |
目的地址
6Bytes |
来源地址
6Bytes |
数据栏位通讯 2Bytes | 主要数据
46-1500Bytes |
校验码
4Bytes |
MTU的最大传输单位
通过上面MAC封包的定义,我们知道目前标准的以太网讯框所能传输的数据量最大可以达到1500bytes,而这个数值就被我们称为MTU(Maximum Transmission Unit)。
但是现在互联网的发展越来越快,对数据传输速率也是要求越来越高,为了提高数据传输的效率,发展出了巨型帧(Jumbo frame),巨型帧的长度各厂商有所不同,从9000Bytes~64000Bytes不等。如此一来,我们的数据传输效率就能提高不少。
不过,互联网的环境非常复杂,不一定每个设备都支持这种技术,就算支持了,有的人也不一定会打开,就算打开了,有的人也不一定会调,所以对于巨型帧的使用,一般只限于局域网,对于公网我们还是使用MTU。
IP 封包的封装
目前网际网路社会的IP有两种版本,一种是目前使用最广泛的IPv4 (Internet Protocol version 4,网际网路协定第四版),一种则是预期未来会热门的IPv6 。IPv4记录的位址由于仅有32位元,预计在2020年前后就会分发完毕,如此一来,新兴国家或者是新的网路公司,将没有网路可以使用。为了避免这个问题发生,因此就有IPv6的产生。IPv6的位址可以达到128位元,可以多出2的96次方倍的网址数量,这样的IP数量几乎用不完啦!虽然IPv6具有前瞻性,但目前主流媒体大多还是使用IPv4 。
我们在前面谈到MAC的封装,那么IP封包的封装也得要来了解一下,才能知道IP到底是如何产生的!IP封包可以达到65535 bytes这么大,在比MAC大的情况下,我们的作业系统会对IP进行拆解的动作。至于IP封装的表头资料绘制如下:(下图第一行为每个栏位的bit数)
4 bits | 4 bits | 8 bits | 3 bits | 13 bits |
Version | IHL | Type of Service | Total Length | |
---|---|---|---|---|
Identification | Flags | Fragmentation Offset | ||
Time To Live | Protocol | Header Checksum | ||
Source Address | ||||
Destination Address | ||||
Options | Padding | |||
Data |
在上面的图示中有个地方要注意,那就是(每一行所占用的位元数为32 bits),各个表头的内容分别介绍如下:
- Version(版本)
宣告这个IP封包的版本,例如目前惯用的还是IPv4这个版本就在这里宣告。 - IHL(Internet Header Length, IP表头的长度)
告知这个IP 封包的表头长度,使用的单位应该是字组(word) ,一个字组为4bytes 大小。 - Type of Service(服务类型)
这个项目的内容为『PPPDTRUU』,表示这个IP封包的服务类型,主要分为:
PPP:表示此IP封包的优先度,目前很少使用;
D:若为0表示一般延迟(delay),若为1表示为低延迟;
T:若为0表示为一般传输量(throughput),若为1表示为高传输量;
R:若为0表示为一般可靠度(reliability),若为1表示高可靠度。
UU:保留尚未被使用。
举例来说,gigabit乙太网路的种种相关规格可以让这个IP封包加速且降低延迟,某些特殊的标志就是在这里说明的。 - Total Length(总长度)
指这个IP封包的总容量,包括表头与内容(Data)部分。最大可达65535 bytes。 - Identification(辨别码)
我们前面提到IP袋子必须要放在MAC袋子当中。不过,如果IP袋子太大的话,就得先要将IP再重组成较小的袋子然后再放到MAC当中。而当IP被重组时,每个来自同一个IP的小袋子就得要有个识别码以告知接收端这些小袋子其实是来自同一个IP封包才行。也就是说,假如IP封包其实是65536那么大(前一个Total Length有规定),那么这个IP就得要再被分成更小的IP分段后才能塞进MAC讯框中。那么每个小IP分段是否来自同一个IP资料,那就是这个识别码的功用啦! - Flags(特殊旗标)
这个地方的内容为『0DM』,其意义为:
D:若为0表示可以分段,若为1表示不可分段
M:若为0表示此IP为最后分段,若为1表示非最后分段。 - Fragment Offset(分段偏移)
表示目前这个IP分段在原始的IP封包中所占的位置。就有点像是序号啦,有这个序号才能将所有的小IP分段组合成为原本的IP封包大小嘛!通过Total Length, Identification, Flags以及这个Fragment Offset就能够将小IP分段在收受端组合起来啰! - Time To Live(TTL,存活时间)
表示这个IP封包的存活时间,范围为0-255。当这个IP封包通过一个路由器时, TTL就会减一,当TTL为0时,这个封包将会被直接丢弃。说实在的,要让IP封包通过255个路由器,还挺难的~ ^_^ - Protocol Number(协定代码)
来自传输层与网路层本身的其他资料都是放置在IP封包当中的,我们可以在IP表头记载这个IP封包内的资料是啥,在这个栏位就是记载每种资料封包的内容啦!在这个栏位记载的代码与相关的封包协定名称如下所示:
IP 内的号码 封包协定名称(全名) 1 ICMP (Internet Control Message Protocol) 2 IGMP (Internet Group Management Protocol) 3 GGP (Gateway-to-Gateway Protocol) 4 IP (IP in IP encapsulation) 6 TCP (Transmission Control Protocol) 8 EGP (Exterior Gateway Protocol) 17 UDP (User Datagram Protocol) 当然啦,我们比较常见到的还是那个TCP, UDP, ICMP 说!
- Header Checksum(表头检查码)
用来检查这个IP表头的错误检验之用。 - Source Address
还用讲吗?当然是来源的IP位址,从这里我们也知道IP是32位元! - Destination Address
有来源还需要有目标才能传送,这里就是目标的IP位址。 - Options (其他参数)
这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳记、严格与宽松之来源路由等。 - Padding(补齐项目)
由于Options的内容不一定有多大,但是我们知道IP每个资料都必须要是32 bits,所以,若Options的资料不足32 bits时,则由padding主动补齐。
你只要知道IP 表头里面含有: TTL, Protocol, 来源位址与目标位址也就够了!而这个IP 表头的来源与目标 IP ,以及那个判断通过多少路由器的TTL ,就能了解到这个IP 将被如何传送到目的端。
route 路由
不同网段之间是无法进行通讯的,其间的数据需要通过路由来进行转发,而路由里面有一个路由表,这个表里则定义和记录着数据的转发依据。
不同网段通讯流程:
- 查询IP封包的目标IP位址:当有封包需要传送时,主机会查阅IP封包表头的目标IP位址;
- 查询是否位于本机所在的网段之路由设定:主机分析自己的路由表,当发现目标IP与源IP的Net_ID相同时(同一网段),则会直接通过区网功能,将资料直接传送给目的地主机。
- 查询预设路由(default gateway): 目标IP与源IP非同一网段,将会分析路由表当中是否有其他相符合的路由设定,如果没有的话,就直接将该IP封包送到预设路由器(default gateway)上头去。
- 送出封包至gateway后,不理会封包流向:而预设的上一级路由接收到这个封包后,会依据上述的流程,也分析自己的路由信息,然后向后继续传输到正确的目的地主机上头。
查看主机路由表:
1 2 3 4 5 |
[root@ZhangSir ~/bin]#route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.16.0.1 0.0.0.0 UG 100 0 0 eth0 172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0 |
IP 与MAC:链结层的 ARP 与RARP 协定
现在我们知道Internet上面最重要的就是那个IP了,也会计算所谓的区域网路与路由。但是,事实上用在传递资料的明明就是乙太网路!乙太网路主要是用网卡卡号(MAC)的嘛!这就有问题啦!那这两者(IP与MAC)势必有一个关连性存在吧?没错!那就是我们要谈到的ARP (Address Resolution Protocol,网路位址解析)协定,以及RARP (Revers ARP,反向网路位址解析)
当我们想要了解某个IP其实是设定于某张乙太网路卡上头时,我们的主机会对整个区网发送出ARP封包,对方收到ARP封包后就会回传他的MAC给我们,我们的主机就会知道对方所在的网卡,那接下来就能够开始传递资料啰。如果每次要传送都得要重新来一遍这个ARP协定那不是很烦?因此,当使用ARP协定取得目标IP与他网卡卡号后,就会将该笔记录写入我们主机的ARP table中(会自动定期清空)。
ICMP 协定
ICMP的全名是『Internet Control Message Protocol,网际网路信息控制协定』。基本上,ICMP是一个错误侦测与回报的机制,最大的功能就是可以确保我们网路的连线状态与连线的正确性!ICMP也是网路层的重要封包之一,不过,这个封包并非独立存在,而是纳入到IP的封包中!也就是说, ICMP同样是通过IP封包来进行资料传送的啦!因为在Internet上面有传输能力的就是IP封包!ICMP有相当多的类别可以侦测与回报,底下是比较常见的几个ICMP的类别(Type):
类别代号 | 类别名称与意义 |
---|---|
0 | Echo Reply (代表一个回应信息) |
3 | Destination Unreachable (表示目的地不可到达) |
4 | Source Quench (当router 的负载过高时,此类别码可用来让发送端停止发送信息) |
5 | Redirect (用来重新导向路由路径的信息) |
8 | Echo Request (请求回应信息) |
11 | Time Exceeded for a Datagram (当资料封包在某些路由传送的现象中造成逾时状态,此类别码可告知来源该封包已被忽略的信息) |
12 | Parameter Problem on a Datagram (当一个ICMP 封包重复之前的错误时,会回覆来源主机关于参数错误的信息) |
13 | Timestamp Request (要求对方送出时间信息,用以计算路由时间的差异,以满足同步性协定的要求) |
14 | Timestamp Reply (此信息纯粹是回应Timestamp Request 用的) |
15 | Information Request (在RARP 协定应用之前,此信息是用来在开机时取得网路信息) |
16 | Information Reply (用以回应Infromation Request 信息) |
17 | Address Mask Request (这信息是用来查询子网路mask 设定信息) |
18 | Address Mask Reply (回应子网路mask 查询信息的) |
那么我们是如何利用ICMP 来检验网路的状态呢?最简单的指令就是ping 与traceroute 了, 这两个指令可以通过ICMP 封包的辅助来确认与回报网路主机的状态。在设定防火墙的时候, 我们最容易忽略的就是这个ICMP 的封包了,因为只会记住TCP/UDP 而已~事实上, ICMP 封包可以帮助连线的状态回报,除了上述的8 可以考虑关闭之外,基本上,ICMP 封包也不应该全部都挡掉!
TCP 协定
在前面的OSI七层协定当中,在网路层的IP之上则是传送层,而传送层的资料打包成什么?最常见的就是TCP封包了。这个TCP封包资料必须要能够放到IP的资料袋当中才行!所以,我们将其简化一下,将MAC, IP与TCP的封包资料这样看:
4 bits | 6 bits | 6 bits | 8 bits | 8 bits |
Source Port | Destination Port | ||
---|---|---|---|
Sequence Number | |||
Acknowledge Number | |||
Data Offset |
Reserved | Code | Window |
Checksum | Urgent Pointer | ||
Options | Padding | ||
Data |
图2.4-2、TCP 封包的表头资料
上图就是一个TCP 封包的表头资料,各个项目以Source Port, Destination Port 及Code 算是比较重要的项目,底下我们就分别来谈一谈各个表头资料的内容吧!
- Source Port & Destination Port (来源端口和目标端口)
IP封包的传送主要是由IP位址连接两端,这个连线的通道所连接的就是端口(port)。比如访问WWW服务器,服务器就必须要启动一个可以让client端连接的端口,这个口就是port (中文翻译成为端口)。同样的,用户端想要连接到某个WWW网站时,就必须要在client主机上面启动一个port ,这样这两个主机才能够利用这条『通道』来传递封包资料!这个目标与来源port的纪录,可以说是TCP封包上最重要的参数了! - Sequence Number (封包序号)
由于TCP封包必须要带入IP封包当中,所以如果TCP资料太大时(大于IP封包的容许程度),就得要进行分段。这个Sequence Number就是记录每个封包的序号,可以让收受端重新将TCP的资料组合起来。 - Acknowledge Number (回应序号)
为了确认主机端确实有收到我们client端所送出的封包资料,我们client端当然希望能够收到主机方面的回应,那就是这个Acknowledge Number的用途了。当client端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。 - Data Offset (资料补偿)
对应Options栏位,那个Options的栏位长度是非固定的,而为了要确认整个TCP封包的大小,就需要这个标志来说明整个封包区段的起始位置。 - Reserved (保留)
未使用的保留栏位。 - Code (Control Flag,控制标志码)
当我们在进行网路连线的时候,必须要说明这个连线的状态,好让接收端了解这个封包的主要动作。这可是一个非常重要的控制码!这个栏位共有6个bits ,分别代表6个控制码,若为1则为启动。分别说明如下:- URG(Urgent):若为1 则代表该封包为紧急封包, 接收端应该要紧急处理,且图2.4-1 当中的Urgent Pointer 栏位也会被启用。
- ACK(Acknowledge):若为1代表这个封包为回应封包,则与上面提到的Acknowledge Number有关。
- PSH(Push function):若为1 时,代表要求对方立即传送缓冲区内的其他对应封包,而无须等待缓冲区满了才送。
- RST(Reset):如果RST 为1 的时候,表示连线会被马上结束,而无需等待终止确认手续。这也就是说, 这是个强制结束的连线,且发送端已断线。
- SYN(Synchronous):若为1,表示发送端希望双方建立同步处理,也就是要求建立连线。通常带有SYN标志的封包表示『主动』要连接到对方的意思。
- FIN(Finish):若为1 ,表示传送结束,所以通知对方资料传毕, 是否同意断线,只是发送者还在等待对方的回应而已。
其实每个项目都很重要,不过我们这里仅对ACK/SYN 有兴趣而已,这样未来在谈到防火墙的时候,你才会比较清楚为啥每个 TCP 封包都有所谓的『状态』条件!那就是因为连线方向的不同所致!底下我们会进一步讨论!至于其他的资料,就得请您自行查询网路相关书籍了!
- Window (滑动视窗)
主要是用来控制封包的流量的,可以告知对方目前本身有的缓冲器容量(Receive Buffer)还可以接收封包。当Window=0时,代表缓冲器已经额满,所以应该要暂停传输资料。Window的单位是byte。 - Checksum(确认检查码)
当资料要由发送端送出前,会进行一个检验的动作,并将该动作的检验值标注在这个栏位上;而接收者收到这个封包之后,会再次的对封包进行验证,并且比对原发送的Checksum值是否相符,如果相符就接受,若不符就会假设该封包已经损毁,进而要求对方重新发送此封包! - Urgent Pointer(紧急资料)
这个栏位是在Code栏位内的URG = 1时才会产生作用。可以告知紧急资料所在的位置。 - Options(任意资料)
目前此栏位仅应用于表示接收端可以接收的最大资料区段容量,若此栏位不使用,表示可以使用任意资料区段的大小。这个栏位较少使用。 - Padding(补足栏位)
如同IP封包需要有固定的32bits表头一样, Options由于栏位为非固定,所以也需要Padding栏位来加以补齐才行。同样也是32 bits的整数。
通讯端口
在上图的TCP表头资料中,最重要的就属那16位元的两个咚咚,亦即来源与目标的端口。由于是16位元,因此目标与来源端口最大可达65535号(2的16次方)!那这个端口有什么用途呢?上面稍微提到过,网路是双向的,服务器与用户端要达成连线的话,两边应该要有一个对应的端口来达成连线通道,好让资料可以通过这个通道来进行沟通。
假如IP是网路世界的门牌,那么这个端口就是那个门牌号码上建筑物的楼层!每个建筑物都有1~65535层楼,你需要什么网路服务,就得要去该对应的楼层取得正确的资料。但那个楼层里面有没有人在服务你呢?这就得要看有没有程序真的在执行啦。所以,IP是门牌,TCP是楼层,真正提供服务的,是在该楼层的那个人(程序)!
Linux可以查看/etc/services 文件,里面记录着以定义的端口与服务。
TCP 的三次握手
TCP 被称为可靠的连线封包,主要是通过许多机制来达成的,其中最重要的就是三向交握的功能。当然, TCP 传送资料的机制非常复杂,有兴趣的朋友请自行参考相关网路书籍。
在建立连线之前都必须要通过三个确认的动作,所以这种连线方式也就被称为三次握手(Three-way handshake)。那么我们将整个流程分四个阶段来说明一下:
- A:封包发起
当用户端想要对服务器端连线时,就必须要送出一个要求连线的封包,此时用户端必须随机取用一个大于1024以上的端口来做为程序沟通的介面。然后在TCP的表头当中,必须要带有SYN的主动连线(SYN=1),并且记下发送出连线封包给服务器端的序号(Sequence number = 10001) 。 - B:封包接收与确认封包传送
当服务器接到这个封包,并且确定要接收这个封包后,就会开始制作一个同时带有SYN=1, ACK=1的封包,其中那个acknowledge的号码是要给client端确认用的,所以该数字会比(A步骤)里面的Sequence号码多一号(ack = 10001+1 = 10002),那我们服务器也必须要确认用户端确实可以接收我们的封包才行,所以也会发送出一个Sequence (seq=20001)给用户端,并且开始等待用户端给我们服务器端的回应! - C:回送确认封包
当用户端收到来自服务器端的ACK数字后(10002)就能够确认之前那个要求封包被正确的收受了,接下来如果用户端也同意与服务器端建立连线时,就会再次的发送一个确认封包(ACK=1)给服务器,亦即是acknowledge = 20001+1 = 20002啰。 - D:取得最后确认
若一切都顺利,在服务器端收到带有ACK=1且ack=20002序号的封包后,就能够建立起这次的连线了。
也就是说,你必须要了解『网路是双向的』这个事实!所以不论是服务器端还是用户端,都必须要通过一次SYN与ACK来建立连线,所以总共会进行三次的交谈!在设定防火墙或者是追踪网路连线的问题时,这个『双向』的概念最容易被忽略,而常常导致无法连线成功的问题!切记切记!
UDP 协定
UDP的全名是:『User Datagram Protocol,用户资料流协定』,UDP与TCP不一样, UDP不提供可靠的传输模式,因为他不是连线导向的一个机制,这是因为在UDP的传送过程中,接受端在接受到封包之后,不会回覆回应封包(ACK)给发送端,所以封包并没有像TCP封包有较为严密的检查机制。至于UDP的表头资料如下表所示:
16 bits | 16 bits |
Source Port | Destination Port |
---|---|
Message Length | Checksum |
Data |
TCP 封包确实是比较可靠的,因为通过三向交握嘛!不过,也由于三向交握的缘故, TCP 封包的传输速度会较慢。至于UDP 封包由于不需要确认对方是否有正确的收到资料,故表头资料较少,所以UDP 就可以在Data 处填入更多的资料了。同时UDP 比较适合需要即时反应的一些资料流,例如影像即时传送软件等, 就可以使用这类的封包传送。也就是说, UDP 传输协定并不考虑连线要求、连线终止与流量控制等特性, 所以使用的时机是当资料的正确性不很重要的情况,例如网路摄影机!
另外,很多的软件其实是同时提供TCP 与UDP 的传输协定的,举例来说,查询主机名称的DNS 服务就同时提供了UDP/TCP 协定。由于UDP 较为快速,所以我们client 端可以先使用UDP 来与服务器连线。但是当使用UDP 连线却还是无法取得正确的资料时,便转换为较为可靠的TCP 传输协定来进行资料的传输啰。这样可以同时兼顾快速与可靠的传输说!