TCP/IP网络编程 TCP/IP协议栈
4应用层
(4.1)功能
(4.2)协议
基于TCP协议的应用程序
FTP(21)
TELNET(23)
BGP
基于UDP协议的应用程序
TFTP(69)
RIP
(4.3)其它
ping命令工作在应用层,它直接使用网络层的ICMP协议,而没有使用传输层的TCP/UDP协议。
3传输层
(3.1)功能
传输层实现端到端的服务,进行TCP的可靠数据传输和UDP的数据报传输。
(3.2)协议
TCP
UDP
SPX(序列分组交换 协议)
(3.3)硬件设备
2网络层
(2.1)功能
网络层提供点到点的服务,进行IP寻址
(2.2)协议
ICMP(Internet Control Message Protocol)控制报文协议:分组网间探测 PING(Packet InterNet Groper)是应用层直接使用网络层的ICMP协议的特殊例子。
IGMP()
IP(Internet Protocol)
ARP(Address Resolution Protocol)地址转换协议: ARP 是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
RARP(Reverse ARP)反向地址转换协议
RIP:RIP是被当作一个应用层进程(虽然它是一个能操作UNIX内核中的转发表的特殊进程)来实现的,所以它能在一个标准套接字上发送和接收报文,并且使用一个标准的传输层协议。RIP是一个运行在UDP上的应用层协议。
(2.3)硬件设备
1网路接口层
(1.1)功能
(1.2)协议
ARP
(1.3)硬件设备
其它
所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。 短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,一般银行都使用短连接。
NAT:网络地址转换属于接入广域网 (WAN) 技术,是一种将私有(保留)地址转化为合法 IP 地址的转换技术。
地址转换解决了因特网地址短缺所面临问题;
地址转换实现了对用户透明的网络外部地址的分配;
使用地址转换后,对IP包加长,快速转发不会造成什么影响;
地址转换内部主机提供一定的“隐私”;
tcpdump 是简单可靠网络监控的实用工具
netstat 显示网络有关的信息,比如套接口使用情况、路由、接口、协议等
ifconfig 是查看活动的网卡信息
OSI七层模型
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
表示层:TIFF、GIF、JPEG、PICT、MPEG、ASII
会话层:NFS、SQL、NETBIOS、RPC
传输层:TCP、UDP、SPX
网络层:ICMP、IGMP、IP、ARP、RARP、OSPF、IPX、RIP、IGRP
数据链路:PPP、FR、HDLC、VLAN、MAC
物理层:RJ45、CLOCK、IEEE802.3
动态路由
建立动态路由需要用到的文件/etc/gateways
ARP欺骗攻击:分为对路由器ARP表的欺骗和对内网PC的网关欺骗。 第一种ARP欺骗的原理是截获网关数据。 第二种ARP欺骗的原理是伪造网关。
重放攻击:重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(FreshnessAttacks)是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。
暴力攻击:暴力破解攻击是指攻击者通过系统地组合所有可能性(例如登录时用到的账户名、密码),尝试所有的可能性破解用户的账户名、密码等敏感信息。攻击者会经常使用自动化脚本组合出正确的用户名和密码。
DNS欺骗攻击:DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。 如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址。
负载均衡设备
四层负责均衡:是通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器与请求客户端建立TCP连接,然后发送Client请求的数据。
七层负载均衡:又称内容交换,也就是主要通过报文中真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的服务器。
Socket
Socket用于描述IP地址和端口,是一个通信链的句柄
Socket服务端的端口是固定的
Socket客户端的端口是不固定的
Linux中,一个端口能够接受TCP链接数量的理论上限是无上限。
私有地址
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
DNS是将域名解析成IP地址的服务,DNS发生问题时无法通过域名访问网页,但是直接通过IP地址连接的应用程序(比如QQ)仍可以使用。
四种情况会发送RST包:
1、端口未打开
2、请求超时
3、提前关闭
4、在一个已关闭的socket上收到数据
网络安全控制技术:防火墙、入侵检测、访问控制
交换机工作在数据链路层,属于二层设备;工作在三层的路由器具备路由转发功能。
当建立连接时,下面哪一个数据包发送顺序是正确的TCP握手协议过程?SYN,ACK+SYN,ACK。
拓扑结构指的是(资源网络)的拓扑结构
计算机网络的拓扑结构是引用拓扑学中研究与大小、形状无关的点、线关系的方法,把网络中的计算机和通信设备抽象为一个点,把 传输介质 抽象为一条线,由点和线组成的几何图形就是计算机网络的拓扑结构。
TCP建立与关闭连接
介绍一下TCP连接建立与断开过程中的状态。TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用、特定数据包以及超时等,具体状态如下所示:
建立连接
LISTEN : Server 端的某个 Socket 正在监听来自远方的 TCP 端口的连接请求。
SYN_SENT :发送连接请求后等待确认信息。当客户端 Socket 进行 Connect 连接时,会首先发送 SYN 包,随即进入 SYN_SENT 状态,然后等待 Server 端发送三次握手中的第 2 个包。
SYN_RECEIVED :收到一个连接请求后回送确认信息和对等的连接请求,然后等待确认信息。通常是建立 TCP 连接的三次握手过程中的一个中间状态,表示 Server 端的 Socket 接收到来自 Client 的 SYN 包,并作出回应。 ESTABLISHED :表示连接已经建立,可以进行数据传输。
ESTABLISHED:
断开连接
FIN_WAIT_1 :主动关闭连接的一方等待对方返回 ACK 包。若 Socket 在 ESTABLISHED 状态下主动关闭连接并向对方发送 FIN 包(表示己方不再有数据需要发送),则进入 FIN_WAIT_1 状态,等待对方返回 ACK 包,此后还能读取数据,但不能发送数据。在正常情况下,无论对方处于何种状态,都应该马上返回 ACK 包,所以 FIN_WAIT_1 状态一般很难见到。
FIN_WAIT_2 :主动关闭连接的一方收到对方返回的 ACK 包后,等待对方发送 FIN 包。处于 FIN_WAIT_1 状态下的 Socket 收到了对方返回的 ACK 包后,便进入 FIN_WAIT_2 状态。由于 FIN_WAIT_2 状态下的 Socket 需要等待对方发送的 FIN 包,所有常常可以看到。若在 FIN_WAIT_1 状态下收到对方发送的同时带有 FIN 和 ACK 的包时,则直接进入 TIME_WAIT 状态,无须经过 FIN_WAIT_2 状态。
TIME_WAIT :主动关闭连接的一方收到对方发送的 FIN 包后返回 ACK 包(表示对方也不再有数据需要发送,此后不能再读取或发送数据),然后等待足够长的时间( 2MSL )以确保对方接收到 ACK 包(考虑到丢失 ACK 包的可能和迷路重复数据包的影响),最后回到 CLOSED 状态,释放网络资源。
CLOSED :初始状态,表示没有任何连接。
CLOSE_WAIT :表示被动关闭连接的一方在等待关闭连接。当收到对方发送的 FIN 包后(表示对方不再有数据需要发送),相应的返回 ACK 包,然后进入 CLOSE_WAIT 状态。在该状态下,若己方还有数据未发送,则可以继续向对方进行发送,但不能再读取数据,直到数据发送完毕。
LAST_ACK :被动关闭连接的一方在 CLOSE_WAIT 状态下完成数据的发送后便可向对方发送 FIN 包(表示己方不再有数据需要发送),然后等待对方返回 ACK 包。收到 ACK 包后便回到 CLOSED 状态,释放网络资源。
CLOSED :初始状态,表示没有任何连接。
例外
CLOSING :比较罕见的例外状态。正常情况下,发送 FIN 包后应该先收到(或同时收到)对方的 ACK 包,再收到对方的 FIN 包,而 CLOSING 状态表示发送 FIN 包后并没有收到对方的 ACK 包,却已收到了对方的 FIN 包。有两种情况可能导致这种状态:其一,如果双方几乎在同时关闭连接,那么就可能出现双方同时发送 FIN 包的情况;其二,如果 ACK 包丢失而对方的 FIN 包很快发出,也会出现 FIN 先于 ACK 到达。
当我们在局域网内使用ping www.nowcoder.com时,使用了哪些协议?
1、首先将域名转换为IP地址,用到了应用层的DNS协议,注意到DNS使用的传输层协议是UDP而不是TCP。
2、接着是使用ping命令检测网络是否是通的,主机是否可达、路由是否可用,这个时候需要从底层物理层向上到网络层;
3、链路层使用的是MAC地址,所以需要根据ARP协议把IP地址转换为MAC地址,从而把命令从链路层传输到网络层。
4、在网络层ping功能发送一个ICMP请求给目标主机,来等待ICMP应答。
所以整个过程并没有用到TCP协议!
TCP报文首部与关闭连接有关的是ACK和FIN
URG:URG=1时,表明紧急指针字段有效,告诉系统有紧急字段需要立即传送。
ACK:ACK=1时确认号才有效,ACK=0时,确认号无效。TCP规定在连接建立之后所有传送的报文都必须吧ACK置1.
RST:RST=1时表示TCP连接出现严重差错,必须释放连接再重新建立连接。
FIN:FIN=1表示要求释放连接。