2.1 网络是个什么玩意儿
2.1.1 什么是网络
2.1.1.1 各自为政的网络硬件与软件技术发展时期
1. 全录公司的Ethernet技术
2. IBM研发的Token-Ring技术
2.1.1.2 ARPANET & TCP/IP
1. 1960年开始研究跨网络硬件的软件
2. 1975年左右ARPANET开始在常见的硬件平台上互通数据(TCP/IP技术的雏形)
3. 1980年DARPA正式退出TCP/IP技术,并植入到BSD Unix中,internet诞生
2.1.1.3 没有任何王法的因特网:Internet
2.1.1.4 软硬件标准指定成功带来的影响:IEEE标准规范
1. 全录公司构建以太网络
2. DEC/Intel与Xerox合作将以太网络标准化
3. IEEE利用802项目制定标准之后19家公司宣布支持IEEE所发布的802.3标准
4. 1989年ISO将以太网络编入IS88023标准,成为公认的标准接口
2.1.1.5 TCP/IP这个internet通讯协议的标准:RFC
2.1.2 计算机网络组成组件
1. 节点:具有IP的设备(集线器不是)
2. 服务器
3. 客户端(工作站)
4. 网卡:一般一个节点至少有一个网卡(比如RJ-45接头的以太网卡)
5. 网络接口:任务是提供IP,一张网卡至少具备一个网络接口
6. 网络拓扑:比如星型联机方式
7. 网关(通讯阀):具有两个以上的网络接口,可以至少连接两个网段,比如IP分享器ADSL调制解调器不是网关但可以通过拨号软件仿真成为一个
2.1.3 计算机网络区域范围
注意:根据距离、线材导致的网速差异及网络应用方式的分类方式正变得越来越模糊,下面的分类只能说是早期的
1. 局域网
2. 广域网
3. 城域网
2.1.4 计算机网络协议:OSI七层协议【44 7层协议数据的传递方式】
OSI中的层
|
功能
|
TCP/IP协议族
|
---|---|---|
应用层
|
文件传输,电子邮件,文件服务,虚拟终端
|
TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
|
表示层
|
数据格式化,代码转换,数据加密
|
没有协议
|
会话层
|
解除或建立与别的接点的联系
|
没有协议
|
传输层
|
提供
端对端的接口
|
TCP,UDP
|
网络层
|
为
数据包选择路由
|
IP,ICMP,OSPF,EIGRP,IGMP
|
数据链路层
|
传输有地址的帧以及错误检测功能
|
SLIP,CSLIP,PPP,MTU
|
物理层
|
以二进制数据形式在物理媒体上传输数据
|
ISO2110,IEEE802,IEEE802.2
|
1. 物理层(Physical Layer):定义电压与讯号;
2. 数据链路层(Data-Link Layer):分两个子层处理,LLC(逻辑链路层)将上层封包转化成MAC,MAC经由IEEE802.3协议取得媒体设备使用权;
3. 网络层(Network Layer):IP协议在这一层定义,同事定义计算机之间的联机建立、终止与维持传输路径,确保封包到达路由;
4. 传送层(Transport Layer):定义TCP/IP,确保封包正确无误地到达;
5. 会话层(Session Layer):确定网络服务建立联机的确认;
6. 表现层(Presentation Layer):网络服务之间数据格式的转化,包括数据的加密解密;
7. 应用层(Application Layer):定义应用程序沟通接口,接受或传递数据给应用程序
2.1.5 计算机网络协议:TCP/IP协议
OSI七层协定 | TCP/IP | 相关通讯协定与标准 | 数据格式 |
应用层 表现层 会话层 | 应用层 | FTP TELNET HTTP SNMP TFTP NTP | 数据段 |
传输层 | 传输层 | TCP UDP | UDP |
网络层 | 网络互连层 | IP ICMP | 数据帧 |
数据链路层 物理层 | 主机到网络层 | LAN:Ethernet,Token Ring ARP WAN:Moderm IADN ATM Serial | 比特 |
注:下面以浏览器打开网页为例介绍TCP/IP协议的运作过程
1. 应用程序阶段:输入网址->【Enter】,浏览器将网址与相关数据包成一个数据,并想下传给TCP/IP的应用程序;
2. 应用层:由应用层提供的HTTP通讯协议将来自浏览器的数据包起来,并给与一个应用层表头,在下下发给传输层;
3. 传输层:由于HTTP为可靠联机,因此将该数据丢入TCP风暴内,并给与一个TCP封包的表头,向网络层丢送;
4. 网络层:将TCP包裹进IP封包内,再给与一个IP表头(主要就是来源与目标的IP),向链结层丢送;
5. 主机到网络层(链结层):假设使用以太网,此时IP会依据CSMA/CD的标准,包裹到MAC讯框中,并给以MAC表头,再转成位串后,利用传输媒体传输到远程主机上。
2.2 TCP/IP的连接层相关协议
2.2.1 广域网使用的设备
1. 传统电话拨接:透过ppp协议(支持TCP/IP,NetBEUI,IPX/SPX等通讯协议),速度很慢
2. 整合数字服务网络(ISDN):联机的两端都需要ISDN的调制解调器来提供联机功能,美国可以打到1.5Mbps
3. 非对称数位用路回路(ADSL):透过pppoe协议,使用电话线的高频部分
4. 电缆调制解调器:同样需要调制解调器连接到IPS,以取得网络参数来上网,透过有线电视使用网络新号
2.2.2 局域网使用的设备-以太网络,速度与标准,RJ45接头(跳线/并行线)
2.2.2.1 网络的速度和标准
注意: 传输速度越快,线材电磁效应的相互干扰就越强,对网络线的要求就越严格。
名称 | 速度 | 网络线等级 |
以太网络(Ethernet) | 10Mbps | - |
高速以太网络(Fast Ethernet) | 100Mbps | CAT 5 |
超高速以太网络(Gigabit Ethernet) | 1000Mbps | CAT 5e /CAT 6 |
2.2.2.2 以太网络的网络线接头(跳线/并行线)
1. 跳线:一边为568A接头,一边为568B接头;
2. 并行线:两边同为568A或568B。
2.2.3 以太网络的传输协议
1. MAC:每个以太网卡出厂时都会赋予一个独一无二的卡号,那就是MAC(Media Access Control),某些笔记本的网卡卡号是可以修改的;
2. IEEE 802.3的CSMA/CD:网络卡之间数据传送的规则
1. 监听信道:确认没有人占用信道才会发出讯框
2. 多点传送:一台主机发出数据后会被集线器复制发往连接在同一集线器上的所有其他主机
3. 碰撞检测:发生数据冲突时数据损毁,并在一个随机时间后再次尝试发送
3. 进一步认识CSMA/CD
1. 网络忙碌时,只要有一部主机对外联机,所有计算机集线器灯都会闪个不停(多点传送)
2. 我的计算机没有被入侵但数据还是被隔壁计算机窃取(多点传送)
3. 共享集线器设备,但大家可以同时上网(数据会被茶城小数据报,大小为1500bytes,每个数据包都经过CSMA/CD的机制,所有人发出的所有数据包平等的竞争使用权)
4. 讯框多大比较好?可以修改大小吗?
1. 以太网:1500bytes/讯框
2. 高速以太网:9000bytes/巨型讯框
2.2.4 MAC的封装格式
注意:MAC是网络硬件上传输的数据的最小单位,传送中只在局域网内生效,跨局域网时会被路由修改来源地址和目标地址以向前发送。
以太网络的MAC讯框
前导码 | 目的地址 | 来源地址 | 数据栏位通讯 | 主要数据 | 检查码 |
8 Bytes | 6 Bytes | 6 Bytes | 2 Bytes | 46-1500 Bytes | 4 Bytes |
1. 前导码
2. 目的地址:在两个节点间要前往的节点的网络卡的硬件地址(00:00:00:00:00:00-FF:FF:FF:FF:FF:FF, 前3位为厂商的代号,后三位为厂商自行设置的装置码)
3. 来源地址:和目的地址对应,两个节点间发送方那个节点的网络卡的硬件地址(00:00:00:00:00:00-FF:FF:FF:FF:FF:FF, 前3位为厂商的代号,后三位为厂商自行设置的装置码)
4. 数据栏位通讯
5. 主要数据:46-1500 Bytes,因为若要侦测碰撞,讯框至少要64Bytes(不包括前导码),不够的话系统要自动补齐到64 Bytes
6. 检查码
2.2.5 MTU最大传输单位
1. IP封包最大65535 bytes,比MTU大得多,因此需要拆开成许多小数据包才能放到MTU中
2. MTU越到,则IP封包拆成的MTU就越少,封包与封包之间的等待时间就越少
3. Gigabit的以太网络节点支持Jumbo frame,定义到9000 bytes(一般以太网络为1500 bytes)
4. 如果一个9000 byte MAC封包要经过一个不支持Jumbo frame的节点,可能会丢弃这个封包然后回报错误
5. 建议在内部网络系统的MTU设定为9000,对外的网卡还是原本的1500
2.2.6 集线器、交换机与相关机制
2.2.6.1 共不共享很重要,集线器还是交换机
1. 集线器因为CSMA/CD(多点传送)的原因会发生封包碰撞
2. 交换机每个端口都有独立的带宽,而且每个端口都有独立的内存记录与其连接的PC的MAC地址,一次可以将封包直接发到对应的PC而不需要多点传送,避免发生封包碰撞
2.3 TCP/IP的网络层相关封包与数据
00-0A-17-0D-26-11
2.2.6.2 什么是全双工、半双工(full-duplex,half-duplex)
1. hub(集线器)无法实现全双工
2. switch(交换器)如果支持全双工模式两端的pc就能够实现全双工
2.2.6.3 自动协调速度机制(auto-negotiation)
1. 新的hub/switch支持N-Way会使用最高的速度测试是否支持,如果不行的话就自动调到下一个等级,一次Gigabit网卡可以与早期110、100Mbps的网卡连接二不会发生什么问题
2.2.6.4 自动分辨网络线跳线或并行线(Auto MDI/MDIX)
1.switch若含有auto MDI/MDIX的支持,会自动分辨网络线的脚位来调整联机,所以不用管网络线是跳线还是并行线
2.2.6.5 新号衰减造成的问题
1. 网络线的问题会导致讯号传递不良而造成联机质量恶劣,会发生时断时续的情况
2.2.6.6 结构化布线
1. 注意墙上的布线,末端墙上的预留孔以及配线端部分
2. 选择的网络媒体与网络线的等级
3. 机柜、机架以及梅花与隐藏网络线的材料等等的挑选
4. 实际施工所需要注意的事项,所有硬件、施工所需要注意的标准规范
2.3 TCP/IP的网络层相关的封包与数据
2.3.1 IP封包的封装
Version (4) | Internet Header Length (4) | Type of Service (8) | Total Length (16) | ||
Identification (16) | Flags (3) | Fragment Offset (13) | |||
Time To Live (8) | Protocol (8) | Header checksum (16) | |||
Source Address (32) | |||||
Destination Address (32) | |||||
Options (Variable) | Padding (0-24) | ||||
Data | |||||
1. 版本:宣告IP的版本为IPv4或者IPv6
2 首部长度(IHL):告知这个IP封包的报头长度,单位为字组(word),一个字组有4bytes
3. 服务类型(PPPDTRUU):
PPP ----表示IP的优先度,目前很少使用
D ----0:一般延迟;1:低延迟
T ----0:一般传输量;1:高传输量
R ----0:一般可靠度;1:高可靠度
UU ----备用
4. 总长度:这个IP封包的总大小,包括表头与内容,最大为65535
5. 辨识码:用来标识属于同一个IP封包MAC讯框的标识码
6. 特殊标志(ODM):
D ----0:可以分段;1:表示不可分段
M ----0:IP封包的最后分段;1:不是IP封包的最后分段
7. 片偏移:标识目前这个IP分段在原来完整的IP封包中的位置,透过4、5、6、7就能重新组装回完整的IP封包
8. 生存时间:即TTL,范围为0-255,每经过一个路由器会-1,当数字变为0时,这个包就会被丢弃
9. 协议代码:记载这个IP封包内数据采用的协议
1 ----ICMP
2 ----IGMP
3 ----GGP
4 ----IP
6 ----TCP
8 ----EGP
17 ----UDP
10. 首部检验和(表头检查码):IP表头的错误检验
11. 源IP地址:发送方的IP地址
12. 目的地IP地址:接收方IP地址
13. 选项(其它参数):包括安全机制处理、路由记录、时间戳、严格与宽松之来源路由等,可选
14. 选项(补齐项目):每个IP封包必须是32 bits,如果数据不足32由这里补齐
15. 数据:IP风暴内携带的真正需要传送的数据
2.3.2 IP地址的组成与分级:网域、IP与门牌关联,分级(class A, B, C)
注意:在同一个物理网段内不能有同相同的主机号,否则会发生IP冲突,造成两部主机都无法使用
2.3.2.1 IP的表示方法
1. 二进制(
网域号:
主机号):
00000000:00000000:00000000:
00000000 ---->
11111111:11111111:11111111:
111111111
2. 十进制:
0:0:0:
0 ---->
255:255:255
:255
2.3.2.2 IP在同一网域的意义
1. Net_ID与Host_ID的限制: 同一个网段内Net_ID是不变的,Host_ID是1-254,0表示整个网段,1表示广播地址
2. 在区网内透过IP广播传递数据:IP设在同一网段且在同一物理网段就能够利用CMSA/CD 透过直接网卡对网卡传递数据(MAC讯框)
3. 设定不同区网在同一物理网段的情况:此时不同网段无法通过广播的方式联机,需要路由器联通两个网段
4. 网域的大小:Net_ID所占的位越少,Host_ID占的位越多,一个网域内可以用设定的主机越多
5. IP与门牌号的联想
6. IP的分级
注意:通过观察
分级 十进制 二进制
Class A:
0_ _ _ :_ _ _ _:_ _ _ _:_ _ _ _
0 -127:_:_:_ ----前8位为Net_ID
Class B:
1 0 _ _:_ _ _ _:_ _ _ _:_ _ _ _
128
-191:_:_:_ ----前16位为Net_ID
Class C:
1 1 0 _
:_ _ _ _:_ _ _ _:_ _ _ _
192-223:_:_:_ ----前24位为Net_ID
Class D:
1 1 1 0
:_ _ _ _:_ _ _ _:_ _ _ _
224_239:_:_:_ ----用来作为 群播的特殊功能
Class E:
1 1 1 1
:_ _ _ _:_ _ _ _:_ _ _ _
240_255:_:_:_ ----保留的没有使用的网段
2.3.3 IP的种类与取得方式:loopback,IP的取得方式
2.3.3.1 IPV4里面的IP
1. Public IP: 由INTERNIC所统一规划的IP,有这种IP才可以连接上Internet
2. Private IP: 私有IP或保留IP,不能连上Internet的IP,主要用于局域网络的联机规划
注意:
1. 使用私有IP作为来源与目的地址的封包不能透过Internet来转送
2. 设定一个简单的防火墙加上NAT(Network Address Transfer),就可以通过IP伪装使私有IP连接上Interent
3.私有IP段(这些IP是无法连接上网络的)
Class A(部分):
10 .0 .0 .0 -
10.255.255.255
Class B(部分):
172.16 .0 .0 -
172.31.255.255
Class C(部分):
192.168.0 .0 -
192.168.255.255
2.3.3.2 IP的取得方式
1. 直接手动设定(向网关询问可用的IP的相关参数)
2 透过拨接(向ISP申请注册,取得账密码)
3. 自动取得网络参数(DHCP)
2.3.4 Netmask,子网与CIDR(Classless Interdomain Routing)
2.3.4.1 Netmask,或称为Subnet mask(子网掩码)
1. 用途:控制子网内Host_ ID的数量,切分子网
2. 规则: 网域中任何一个IP & 子网掩码 ==>网域(Network & Broadcast-->Netmask)
3. 案例1:192.168.0._这个Class C 网域的子网掩码
第一个: 11000000.10101000.00000000.00000000 --> 192.168.0.0
最后一个:11000000.10101000.00000000 .11111111 -->192.168.0.255
子网掩码:11111111.11111111.11111111.11111111 -->255.255.255.0
注:Class A,B,C三个等级的子网掩码
Class A: 11111111.00000000.00000000.00000000 --> 255.0 .0 .0
Class B: 11111111.11111111.00000000.00000000 --> 255.255.0 .0
Class C: 11111111.11111111.11111111.00000000 --> 255.255.255.0
2.3.4.2 子网切分
注意:其实就是在Class A,B,C的基础上将部分Host_ID的位作为Net_ID部分
案例1:试着计算出172.16.0.0,但Net_ID占用23个位是,这个网域的Netmask,Network,Boradcast等参数
第一步:观察这个IP属于Class B(
128
-191:_:_:_),因此预设前16位为Net_ID,后16位为Host_ID;
第二步:因为题目中将Net_ID扩展到23位,因此需要拿出Host_ID的前7位加入到Net_ID;
第三步:将涉及到Host_ID的后两段转化成二进制,以观察Host_ID全为0和全为1的情况,及Network和Broadcast:
172
.16
.00000000 .00000000 ----Network(网段)
172 .16
.00000001 .11111111 ----Broadcast(广播地址)
111111111 .11111111 .11111110 .00000000 ----Netmask(子网掩码)
注:总结上面的案例,其实就是只要给出了某个级别的IP以及网域部分所占的位数,如果要用它划分子网,则马上能知道子网掩码(网域的位全为1,主机号部分全为零),广播地址和子网掩码需要先转换成二进制,然后令主机号部分全部变为1和全部变为零,在转变成10进制就知道了具体值。
案例二:192.168.0.0,给与26位Net_ID,可以划分为几个网段,分别是那几个?
注意:从ISP哪里拿到的某个级别的IP不是一个IP地址而是一个网段,我们可以借以进行我们的子网划分
第一步:这是一个Class C网域,后8位为Host_ID,因为需要前26位作为Net_ID,因此需要Host_ID只剩6位
第二步:2位的1、0共有4(2^2)种变换,因此能在原网段的基础上进一步划分4个网段,没个网段可以有2^6-2个IP分配出来;
第三步:这4个子网段分别是
192.168.0.
00000000-
192.168.0.
00
111111 <==> 192.168.0.0-192.168.0.63 <==>192.168.0.0/26
192.168.0.
01000000-
192.168.0.
01
111111 <==> 192.168.0.64-192.168.0.127 <==>192.168.0.64/26
192.168.0.
10000000-
192.168.0.
10
111111 <==> 192.168.0.128-192.168.0.191 <==>192.168.0.64/26
192.168.0.
11000000-
192.168.0.
11
111111 <==> 192.168.0.192-192.168.0.255 <==>192.168.0.64/26
案例三:192.168.10.100/25与192.168.10.200/25是否在一个网域
第一步:将Host_ID所在的数据段转为二进制
192.168.10.100 -->
192.168.10.01100100
192.168.10.200 -->
192.160.10.11001000
第二步:将Host_ID全部置为0(Network),然后转变会10进制
192.168.10.00000000 --> 192.168.10.0
192.168.10.10000000 --> 192.168.10.128
第三步:因为两者的Network不同,因此判断不在同一网域
2.3.4.3 无层级IP:CIDR(Classless Interdomain Routing)
1. 无等级IP:为了解决网络过于细分导致网络效能不佳,将部分Net_ID拿来做Host_ID,打破原本IP代表等级的方式,被称为无等级网络间路由
2. 案例:192.168.0.0/16(按照第一段判断是Class C,但前16位作为网域明明是Class B的方式)
2.3.5 路由的概念
注意:Internet上的路由协议与变化是相当复杂的,因为Internet上面的路由并不是静态的,而是可以随时因环境的变化而修订每个封包的发送方向。
2.3.5.1. 路由的概念(getway/router):提供IP的路径选择功能,使IP跨网域传输(Network不同的两个IP无法通过广播实现数据的传递)
2.3.5.2. 静态路由的步骤(A网段的主机mary要将IP封包传送给B网段的mark,经过默认路由A)
1. 主机mary查询IP封包表头的目标IP地址;
2. mary主机查询自己的路由表,当发现目标IP与本机IP的Net_IP相同时,则主机mary会着急接透过区网功能,将数据直接传送给目的地主机;发现不在同一网域,主机mary分析路由表当中是否有其它相符的路由设定,如果没有的话,就直接将该IP封包送到预设路由器(默认网关A);
3. IP封包发给默认路由A后,主机mary不在例会剩下的工作。路由A接受到这个封包后,分析自己的路由表,继续传输到正确地目的地主机上。
2.3.6 观察主机路由
1. 查看主机路由表的指令
# route -n ----查看当前主机的路由表(-n :主机名位置显示主机的IP)Kernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use lface192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 ----当前网域,往这个网域发送IP封包使用eth0这个网卡127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo ----内部循环IP0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 ----如果IP规则中没有要发送的IP封包中的目标IP,就发往192.168.0.254这个默认网关2. 指令的解释Destination: 即NetworkGetway: 该接口的网关,0.0.0.0表示不需要穿过别的网关,直接通过网卡多点传送,如果要发送的IP封包内的目标地址不在路由规则中Genmask: 即Netmask(子网掩码),和Destination一起组合为一个网域Flags: 该旗标用来表示该网域或主机代表的意义U: 代表该路由可用G:代表该网域需要经由Gateway来帮忙转递
H:代表该行路由为一部主机,而非某个网域
Metric:
Ref:
Use:
lface: 即Interface(接口)
2.3.7 IP与MAC:链接层的ARP与RARP协议
2.3.7.1. 概念
1. ARP(Address Resolution Protocol):地址解析协议,是获得物理地址的一个TCP/IP协议。某节点的IP地址的ARP请求被广播到网络上后,这个节点会收到确认其物理地址的应答,这样的数据包才能被传送出去。具体说就是将网络层(IP层,相当于OSI的第三层)地址解析为数据链路层(MAC层,也就是相当于OSI的第二层)的MAC的地址。
2. RARP(Revers ARP): 反向地址解析协议
2.3.7.2 指令
1. 如何取得自己本机的网卡卡号(MAC)
# ifconfig eth0 ----查看本机eth0这个网卡的MAC地址(HWaddr)
2. 取得本机的ARP表格内的IP/MAC对应数据
# arp -n ----列出目前主机上记载的IP/MAC对应的ARP表格(主机名用IP显示)
# arp -s 192.268.1.100 01:00:2D:23:A1:0E ----将这条IP/MAC写入ARP表格
# arp -a ----显示所有接口的ARP缓存表
# arp -a -N 10.0.0.99 ----显示10.0.0.99缓存在ARP缓存表中对应的信息
2.3.8 ICMP协议
1. ICMP协议简介:Internet控制报文协议(Internet Control Message Protocal)。它是TCP/IP的一个自协议,用于在IP主机、路由器之间传递控制消息。从技术的角度讲,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网络的连线状况,也能确保连线的准确性。其功能主要有:侦测远端主机是否存在;建立及维护路由资料;重导资料传输路径。
2. 理由ICMP协议工作的指令:ping,traceroute
# ping -t [ip] <==> # ping [ip] ----不停ping对方主机,直到ctrl+c
# ping -a [ip] ----返回主机的名字
# ping -n 50 [ip] ----发送50个Echo数据包,指定数量借以衡量数据包的往返时间,最快时间、最慢时间
# ping -l 65500 -t [ip] ----指定大小65500bytes,可用于网络攻击
# ping -n 1 -r 9 202.96.105.101 ----发送一个数据包,做多记录9个路由
3. ping价差连通性6个步骤
# ifconfig ----观察本地网络设置是否正确
# ping 127.0.0.1 ----检查本地德尔TCP/IP协议有没有装好
# ping [本机IP] ----检查本机的IP地址设置是否有误
# ping [本网关或本网IP地址] ----局域网内检查硬件是否有问题
# ping [本地DNS地址] ----检查DNS的IP是否正确
# ping [远程IP地址] ----检查本网或本机与外部的连接是否正常
2.4 TCP/IP的传输层相关封包与数据
注意:各封包之间的相关性
MAC表头 | IP表头 | TCP表头 | 实际数据 |
|-----------------------------------------------IP封包-----------------------------------------|
|-----------------------------------TCP封包-------------------|
2.4.1 可靠联机的TCP协议:通讯端口,特权端口(Privilleged Ports),Socket Pair
2.4.1.1.TCP封包的表头格式
--------|------------|------------|----------------|----------------
|源端口(16bits) |目的端口(16bits) |
-------------------------------------------------------------------
| 序号(32bits) |
--------------------------------------------------------------------
| 确认号 (32bits) |
-------------------------------------------------------------------
|资料补偿| 保留 (6) | 代码(6) | 窗口尺寸(16) |
-------------------------------------------------------------------
| 校验码(16) | 紧急指针(16) |
-------------------------------------------------------------------
| 选项(16) | 补足字段(16) |
--------------------------------------------------------------------
| 数据(32) |
--------------------------------------------------------------------
2.4.1.2 表头说明
2. Destination Port(目的端口):标识提供服务的设备的应用程序的端口号3. Sequence number(序号):用于标识本地发送的TCP数据的顺序4. Acknowledgment number(确认号):用于对接收到的TCP数据进行确认,客户端收到这个确认码时就确定之前传递的封包被正确地接收5. Data Offset(报头长度):这个标志用来说明整个封包区段的起始位置6. Reserver(保留):该字段不被使用7. Code(代码):用于标识TCP不同的控制消息URG(Urgent) ----1:紧急封包,紧急指针会被启用ACK(Acknoledge) ----1:响应封包,与确认号有关PSH(Push function) ----1:代表要求对方立即传送缓冲区内的其它对应封包,而无需等待缓冲区满了才传送RST(Reset) ----1:表示联机会被马上结束,而无需等待终止确认手续SYN(Synchronous) ----1:表示发送端希望双方健伦理同步处理,也就是要求建立联机FIN(Finish) ----1:表示传送结束,通知对方数据传毕,是否同意断线8. Window Size(窗口尺寸):用于标识本地设备在收到对方确认消息前能够发送的TCP数据量的大小,window=0代表缓冲器已满,暂停数据传送9. Checksum( 校验和):用于校验TCP数据的正确性,发送方和接收方都会对封包进行校验,发现校验和不同就判定封包损毁10. Urgent Pointer(紧急指针):用于标识TCP所承载的高层数据需要紧急或特殊处理的部分,URG=1时才有效11. Options(选项):用于TCP报头功能的扩展12. Padding(补足字段):TCP需要笃定大32bits的表头,不够的话补足到32bits12. Data(数据):用于承载高层数据载荷
2.4.1.3 通讯段端口
注意:默认情况下,WWW服务器开启80端口,因此浏览器的请求封装成TCP封包的目标端口为80,来源端口却是主机随机启动的一个端口。
2.4.1.3 特权端口(Privileged Ports)
注意:小于1024一下的端口启动时,启动者必须为root
20 | FTP-data,文件传输协议所使用的主动数据传输端口 |
21 | FTP,文件传输协议的命令传输协议 |
22 | SSH,较为安全的远程联机通道 |
23 | Telnet,早期的远程联机服务器 |
25 | SMTP,简单邮件传输协议,用来作为mail server的端口 |
53 | DNS,用在作为名称解析的领域名服务器 |
80 | WWW,全球信息网服务器 |
110 | POP3,邮件收信协议,办公室用的收信软件就是透过它 |
443 | https,有安全加密协议的WWW服务器 |
1433 | sqlserver数据库 |
1521 | oracle数据库 |
3306 | mysql数据库 |
2.4.1.4 socket pair
定义:( IP:port)支持TCP/IP的网络通信的基本操作单元,可以看做不同主机之间的进程进程进行双向通信的断点,简单地说就是通信的双方的一种约定,用套接字中的相关函数来完成通信过程。
2.4.2 TCP的三项交握(三次握手)与释放连接(四次握手)
1.建立连接三次握手图示
-----------------------------------------------------------------------------
| ----------------------------------------------------------- |
(8080)-----|-----| (Code): _ _ _ _ 1 _ (SYN=1) |---------->|
| | (Sequence):
x
| |
| ----------------------------------------------------------- |
| |
| ----------------------------------------------------------- |
|<----------| (Code):_ 1 _ _ 1 _ (ACK=1,SYN=1) |-----|----(80)
| | (Sequence):
y
| |
| | (Acknowledgment number):
x+1 | |
| ------------------------------------------------------------ |
| |
| ----------------------------------------------------------- |
(8080)-----|-----| (Code): _ _ _ _ 1 _ (SYN=1) |---------- >|
| | (Acknowledgment number):
y+1 | |
| ----------------------------------------------------------- |
------------------------------------------------------------------------------
2. 为什么不能是两次握手
还要再发送一次是为了防止已失效的连接请求报文突然又传到B,因而产生错误。也就是说,在某种情况下,A的第一个在某个节点滞留了,延误到达,本来这是一个早已失效的报文段,但是在A发送第二个,并且得到B的回应,建立了连接以后,这个报文段竟然到达了,于是B就认为,A又发送了一个新的请求,于是发送确认报文段,同意建立连接,假若没有三次的握手,那么这个连接就建立起来了(有一个请求和一个回应),此时,A收到B的确认,但A知道自己并没有发送建立连接的请求,因为不会理睬B的这个确认,于是呢,A也不会发送任何数据,而B呢却以为新的连接建立了起来,一直等待A发送数据给自己,此时B的资源就被白白浪费了。但是采用三次握手的话,A就不发送确认,那么B由于收不到确认,也就知道并没有要求建立连接。
3. 结束连接的四次握手
(一):客户端发送断开连接的报文
(二):B收到连接释放报文段后就立即发送确认,然后就进入close-wait状态,此时TCP服务器进程就通知高层应用进程,因而从A到B的连接就释放了。此时是“半关闭”状态。即A不可以发送给B,但是B可以发送给A。
(三):此时,若B没有数据报要发送给A了,其应用进程就通知TCP释放连接,然后发送给A连接释放报文段,并等待确认。
(四):A发送确认后,进入time-wait,注意,此时TCP连接还没有释放掉,然后经过时间等待计时器设置的2MSL后,A才进入到close状态。
-----------------------------------------------------------------------------
| ----------------------------------------------------------- |
(8080)---(一)-| (Code): _ _ _ _ _1 (FIN=1) |---------->|
| | (Sequence):
x
| -
| -----------------------------------------------------------
-
| -
| -----------------------------------------------------------
-
|<----------| (Code):_ 1 _ _ _ _ (ACK=1) |----(二)--(80)
_ | (Sequence):
y
|
|
_ | (Acknowledgment number):
x+1 |
|等待数据全部传输完毕
_ ------------------------------------------------------------
|
_ -----------------------------------------------------------
|
|<----------| (Code):_ 1_ _ _ 1 (ACK=1,FIN=1) |---(三)--(80)
_ | (Sequence):
z
| |
_ | (Acknowledgment number):
x+1 | |
_ ------------------------------------------------------------ |
_ |
_ ----------------------------------------------------------- |
(8080)---(四)-| (Code): _ 1 _ _ _ _ (ACK=1) | ---------- >
|服务器端停止连接服务
| | (Sequence):
x+1
| 如果服务器没有收到最后这个确认报文
| | (Acknowledgment number):z
+1 | 会超时重传,这也是为什么客户端在发
| ----------------------------------------------------------- 送完最后那个报文后会有2MSL的等待
|
等待2MSL 时间。如果立即关闭,服务器却没有收
|
到确认报文。那么服务器的连接资源就
|
客户端终止 无法关闭了。
4. 客户端发送完最后一个确认报文后为什么不立即关闭连接
①、为了保证A发送的最后一个ACK报文段能够到达B。即最后这个确认报文段很有可能丢失,那么B会超时重传,然后A再一次确认,同时启动2MSL计时器,如此下去。如果没有等待时间,发送完确认报文段就立即释放连接的话,B就无法重传了(连接已被释放,任何数据都不能出传了),因而也就收不到确认,就无法按照步骤进入CLOSE状态,即必须收到确认才能close。②、防止“已失效的连接请求报文段”出现在连接中。经过2MSL,那些在这个连接持续的时间内,产生的所有报文段就可以都从网络中消失。即在这个连接释放的过程中会有一些无效的报文段滞留在楼阁结点,但是呢,经过2MSL这些无效报文段就肯定可以发送到目的地,不会滞留在网络中。这样的话,在下一个连接中就不会出现上一个连接遗留下来的请求报文段了。可以看出:B结束TCP连接的时间比A早一点,因为B收到确认就断开连接了,而A还得等待2MSL.
2.4.3 非连接导向的UDP协议
UDP是一种不可靠的、无连接的数据报服务。源主机在传送数据前不需要和目标主机建立连接。数据被冠以源、目标端口号等UDP报头字段后直接发往目的主机。这时,每个数据段的可靠性依靠上层协议来保证。在传送数据较少、较小的情况下,UDP比TCP更加高效。如图2-6所示,是UDP头部结构(RFC 793、1323):●源、目标端口号字段:占16比特。作用与TCP数据段中的端口号字段相同,用来标识源端和目标端的应用进程。●长度字段:占16比特。标明UDP头部和UDP数据的总长度字节。●校验和字段:占16比特。用来对UDP头部和UDP数据进行校验。和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。
2.4.4 网络防火墙与OSI七层协议
第二层:可以针对来源与MAC进行抵挡
第三层:主要针对来源与目标IP,以及ICMP的类别进行低档
第四层:针对TCP/UDP的端口进行抵挡,也可以针对TCP的状态进行低档
2.5 连上Internet前的准备事项
2.5.1 用IP上网?主机名上网?DNS系统?
2.5.2 一组可以连上Internet的必要网络参数
2.6 重点回顾
2.7 本章习题
2.8 参考数据与延伸阅读