数据流转示意
先需要了解一些基本的概念
OSI(Open System Interconnection)开放系统互连参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。
OSI七层协议模型
应用层
DHCP · DNS · FTP · Gopher ·GTP · HTTP · IMAP4 · IRC · NNTP · NTP · POP3 · RPC · RTCP · RTP ·RTSP · SIP · SMTP ·SNMP · SSH · SDP · SOAP .STUN. SSDP · TELNET · XMPP
表示层
HTTP/HTML · FTP · Telnet · ASN.1(具有表示层功能)
会话层
ADSP ·ASP ·H.245·ISO-SP ·iSNS ·NetBIOS ·PAP ·RPC·
RTCP ·SMPP ·SCP ·SSH ·ZIP ·SDP(具有会话层功能)
传输层
TCP · UDP · TLS · DCCP · SCTP ·RSVP · PPTP
网络层
IP (IPv4 · IPv6) · ICMP · ICMPv6 · IGMP ·IS-IS · IPsec · BGP · RIP · OSPF ·ARP · RARP
数据链路层
Wi-Fi(IEEE 802.11) · WiMAX(IEEE 802.16) ·ATM · DTM · 令牌环 · 以太网路 ·
FDDI · 帧中继 · GPRS · EVDO · HSPA · HDLC · PPP · L2TP · ISDN ·STP
物理层
以太网路卡 · 调制解调器 · 电力线通信(PLC) · SONET/SDH(光同步数字传输网) ·
G.709(光传输网络) · 光导纤维 · 同轴电缆 · 双绞线
TCP/IP协议栈是美国国防部高级研究计划局计算机网(ARPANET)和其后继因特网使用的参考模型。ARPANET是由美国国防部赞助的研究网络。最初,它只连接了美国境内的四所大学。随后的几年中,它通过租用的电话线连接了数百所大学和政府部门。最终ARPANET发展成为全球规模最大的互连网络-因特网。最初的ARPANET于1990年永久性地关闭。
ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。
TCP/IP四层模型
应用层
应用程序产生并发送数据,数据经过层层包装,最后数据将封装成以太网帧,再从链路中发送出去。
通信过程中,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)
封包过程
数据包到达目标机器后经过相反的过程,最终被目标程序接收
解包过程
TCP数据报结构
TCP数据报结构
Wireshark 抓包数据
数据报文
IP数据报结构
IP数据包结构
Wireshark 抓包数据
数据报文
以太网帧结构
Preamble 前导码,序言:7byte或56bits的长度,为交替的0和1,来进行时钟同步。
Start frame delimiter (SFD)帧开始符号: 该符号 (1 byte: 10101011)表示了下面就是数据了,不能继续用来时钟同步了。10101011与preamble的1结尾相连接,形成2个1作为标志。
Destination address 和source address 就是源mac和目的mac地址
Type类型: 此字段定义包封装在其中的上层协议的框架。该协议可以是IP、ARP、OSPF等。
Data:数据来源于上一层,大小应在46到1500byte之间,如果小于46,则会自动补0,反之需要分割
CRC错误检测:检测源和目的mac地址与数据的和,如果发现错误,则该帧丢弃。
以太网封装
Wireshark 抓包数据
数据报文
传输示意图
TCP的三次握手和四次挥手
建立连接
第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的***(Sequence Number)字段里。
第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即X+1。
第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1。
断开连接
第一次挥手:客户端发送一个FIN,用来关闭服务端到Server的数据传送,客户端进入FIN_WAIT_1状态。
第二次挥手:服务端 收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态
第三次挥手:服务端发送一个FIN,用来关闭Server到Client的数据传送,服务端进入LAST_ACK状态。
第四次挥手:客服端收到FIN后,服务端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
首先大概知道什么是交换机、路由器和网关设备等,以及常见的网络结构
这里指以太网交换机,以太网交换机的结构是每个端口都直接与主机相连,并且一般都工作在全双工方式。交换机能同时连通许多对端口,使每一对相互通信的主机都能像独占通信媒体那样,进行无冲突地传输数据。
以太网交换机工作于OSI网络参考模型的第二层(即数据链路层),是一种基于MAC(Media Access Control,介质访问控制)地址识别、完成以太网数据帧转发的网络设备。
交换机在端口上接受计算机发送过来的数据帧,根据帧头的目的MAC地址查找MAC地址表然后将该数据帧从对应端口上转发出去,从而实现数据交换。
路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。
路由器又可以称之为网关设备。工作于OSI网络参考模型的第三层(即网络层),对不同的网络之间的数据包进行存储、分组转发处理,而数据在一个子网中传输到另一个子网中,可以通过路由器的路由功能进行处理。在网络通信中,路由器具有判断网络地址以及选择IP路径的作用,可以在多个网络环境中,构建灵活的链接系统,通过不同的数据分组以及介质访问方式对各个子网进行链接。路由器在操作中仅接受源站或者其他相关路由器传递的信息,是一种基于网络层的互联设备。
路由器只能根据具体的IP地址来转发数据,IP地址由网络地址和主机地址两部分组成。计算机之间的通信只能在具有相同网络地址的IP地址之间进行,如果想要与其他网段的计算机进行通信,则必须经过路由器转发出去。
路由器的多个端口可以连接多个网段,每个端口的IP地址的网络地址都必须与所连接的网段的网络地址一致。不同的端口它的网络地址是不同的,所对应的网段也是不同的,这样才能使各个网段中的主机通过自己网段的IP地址把数据发送到路由器上。
对于每一个接收到的数据包,路由器都会重新计算其校验值,并写入新的物理地址。
路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点。
网关(Gateway)又称网间连接器、协议转换器。默认网关在【网络层】上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。
【说明:由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用都是路由来接入网络,因此通常指的网关就是路由器的IP!】
那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机
只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。
首先‘网关’一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关;而‘路由器’么一般特指能够实现路由寻找和转发的特定类产品,路由器很显然能够实现网关的功能。
我们在PC上设置的默认网关是什么,默认网关事实上不是一个产品而是一个网络层的概念,PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行转发,也就是默认网关。这个网关可以在路由器上,可以在三层交换机上,可以在防火墙上,可以在服务器上,所以和物理的设备无关。
家用路由器 = 路由器 + 防火墙 + 交换机 = 防火墙 + 交换机 + NAT
防火墙:路由器在许多方面扮演着基本防火墙的角色,包括自动拒绝不属于网络内的计算机与外部世界之间正在进行的交换的一部分的传入数据。另一方面,如果来自未知地址的端口探测突然出现,你的路由器就会充当保镖,拒绝请求,有效地隐藏你的计算机。
网关:家庭路由器还充当网络交换机。网络交换机是一种硬件,它可以促进内部网络上计算机之间的通信。如果没有交换功能,这些设备可以通过路由器与更大的互联网通信,但不能相互通信。
NAT:我们都知道,一台家用路由器可以允许多台设备同时连接上网,那么当设备通过家用路由器向网络发送请求后,返回的响应到达路由器时,路由器必须要知道该响应对应的是哪台设备发送的请求。我们向网络供应商(ISP)申请网络访问权限时,ISP会给路由器分配一个公网ip,路由器内部的设备只能使用内网ip。NAT的作用就是实现公网/内网ip以及端口的转换。为此,需要一张表,用于记录内外ip和端口的映射关系。
假设内网中有两台设备A和B,同时访问同一个外网ip的相同端口。那么在路由器处就会记录如下映射关系:
(remote ip_r : port_r)--(local ip_a : a_port)
(remote ip_r : port_r)--(local ip_b : b_port)
假设恰好a_port和b_port的值相同,那么来自远端的响应数据到达路由器时,路由器就无法确定该请求应该给A还是给B。对于这种情况,NAT采用一个三元组来进行区分:(remote ip_r : port_r)(nat port)(local ip_a : a_port),即通过增加nat port来进行区分。当A和B请求到来时,为两个请求生成两个尚未使用的端口:a_port和b_port,并记录如下关系:
(remote ip_r : port_r)(nat a_port)(local ip_a : same_port)
(remote ip_r : port_r)(nat b_port)(local ip_b : same_port)
即当A请求到达路由器时,路由器将请求的源ip换成ISP分配的公网ip,并将源端口换成a_port;而当请求B到达路由器时,路由器将请求的源ip换成ISP分配的公网ip,并将源端口换成b_port。当A和B的请求返回时,根据返回的目的端口(返回的目的端口就是请求的源端口)是a_port还是b_port即可确定该将响应给A还是B。
通过电话线上网的时代,我们通过猫来连接互联网。现在运营商都升级成了光纤了,所以原来的猫换成光猫。
猫
调制解调器(英文名Modem),俗称“猫”,是一种计算机硬件。
它能把计算机的数字信号翻译成可沿普通电话线传送的脉冲信号,而这些脉冲信号又可被线路另一端的另一个调制解调器接收,并译成计算机可懂的语言。
计算机内的信息是由“0”和“1”组成数字信号,而在电话线上传递的却只能是模拟电信号。于是,当两台计算机要通过电话线进行数据传输时,就需要一个设备负责数模的转换。
光猫
光猫和上面说的猫也是一样的,只是将传输脉冲信号变成了传输光信号。
现在一般的光猫外形都是和无线路由器相似,并且光猫上的天线也是可以发射无线信号的,这种能够自带路由器功能的,并且还能内置wifi功能的光猫,是一种集合光猫和路由一体的机器。
目前,家庭上网基本上都实现了FTTH,也就是光纤入户。 宽带上网、IPTV、电话均通过一根光纤接入,实现了“三网融合”。
生活中,我们使用手电筒时,可以通过明暗的变化传递信息,光纤传输信息跟这个差不多。
在网络世界里,只有0和1,数字信号不能直接变成光信号,需要将数字信号转换成电信号,比如1用高压表示,0用低压表示。将这些电信号输入到激光、二极管等光源,光源根据信号电压变化而发光,比如高电压发光亮,低电压发光暗。 光信号到达对端时,通过光敏元件根据光的亮度产生不同的电压,转换成电信号,最后将电信号转换成数字信号,这样我们就收到信号了。
只是在网上随便找的示例
家庭
学校
公司
1、当发送的目的地在局域网时,通过IP和子网掩码可以判断,然后根据本地的(IP地址 - 物理地址)映射表(arp协议),就能找到目标的mac直接发送数据包了。
2、当发送的目标地不在局域网中时,数据包会发送到网关(一般就是路由器)
1、从内网发到公网的数据包,在经过网关后,利用NAT,会被转换成网关的MAC,IP层地址被替换成公网真实IP。网关处会有一个映射关系表,这样返回的数据就会根据此映射关系做相应数据转发。
2、数据包在经过交换机时不会修改数据,直接转发。
3、数据包在经过中间路由器之后 源mac 和 目标mac 都是要改变,源mac改成路由器出网卡的mac,目标mac改成下一跳的mac,当然还会重新计算以太网帧的CRC等
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
NAT的几种实现方式
静态转换:是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
动态转换:是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
端口多路复用(Port address Translation,PAT):是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
ALG(Application Level Gateway):即应用程序级网关技术:传统的NAT技术只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令、DNS协议的 "A" 和 "PTR" queries命令和部分ICMP消息类型等都需要相应的ALG来支持。
NAPT(Network Address Port Translation),即网络地址端口转换,可将多个内部地址映射为一个合法公网地址,但以不同的协议端口号与不同的内部地址相对应,也就是<内部地址+内部端口>与<外部地址+外部端口>之间的转换。NAPT普遍用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT也被称为“多对一”的NAT,或者叫PAT(Port Address Translations,端口地址转换)、地址超载(address overloading)。
NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。NAPT算得上是一种较流行的NAT变体,通过转换TCP或UDP协议端口号以及地址来提供并发性。除了一对源和目的IP地址以外,这个表还包括一对源和目的协议端口号,以及NAT盒使用的一个协议端口号。
NAPT的主要优势在于,能够使用一个全球有效IP地址获得通用性。主要缺点在于其通信仅限于TCP或UDP。当所有通信都采用TCP或UDP,NAPT允许一台内部计算机访问多台外部计算机,并允许多台内部主机访问同一台外部计算机,相互之间不会发生冲突。
内网实现上网的方案一般就是Nat 和 Proxy
查看地址解析协议(ARP)使用的“IP 到物理”地址转换表
c:>arp -a
查路由表
c:>route print
追踪路由
c:>tracert baidu.com
抓包
Wireshark