计算机网络基础之TCP/IP 协议栈
计算机网络基础之TCP/IP 协议栈
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.TCP/IP 协议栈概述
1>.什么是TCP/IP协议栈
Transmission Control Protocol/Internet Protocol
传输控制协议/因特网互联协议 TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议 最早发源于美国国防部(缩写为DoD)的因特网的前身ARPA网项目,1983年1月1日,TCP/IP取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护 共定义了四层,分别为网络访问层,Internet层,传输层,应用层。 和ISO参考模型的分层有对应关系如下图所示。
2>.TCP/IP 应用层
3>.传输层
4>.可靠性 vs.高效性
5>.TCP特性
工作在传输层 面向连接协议 全双工协议 半关闭 错误检查 将数据打包成段,排序 确认机制 数据恢复,重传 流量控制,滑动窗口 拥塞控制,慢启动和拥塞避免算法
二.TCP协议
1>.TCP包头信息
源端口(source port)、目标端口(dest port):
计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个 序列号(sequence):
表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个比特位,就会出现序列号回绕,再次从 开始 确认号(acknowledgment):
表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号 数据偏移:
表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节 URG:
表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效 ACK:
表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段 PSH:
提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中 RST:
如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段 SYN:
在建立连接时使用,用来同步序号。当SYN=,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=,ACK=1时,表示对方同意建立连接。SYN=,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段 FIN:
表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段 窗口大小:
表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值 校验和:
提供额外的可靠性 紧急指针:
标记紧急数据在数据字段中的位置 选项部分:
其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(^-)*-=40字节
常见选项:
最大报文段长度:Maxium Segment Size,MSS,通常1460字节
窗口扩大:Window Scale
时间戳: Timestamps
2>.TCP包头选项
最大报文段长度MSS(Maximum Segment Size)
指明自己期望对方发送TCP报文段时那个数据字段的长度。比如:1460字节。数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太大也不宜设的太小。若选择太小,极端情况下,TCP报文段只含有1字节数据,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,网络的利用率就不会超过1/。若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。因此MSS应尽可能大,只要在IP层传输时不需要再分片就行。在连接建立过程中,双方都把自己能够支持的MSS写入这一字段。 MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中
MTU和MSS值的关系:MTU=MSS+IP Header+TCP Header
通信双方最终的MSS值=较小MTU-IP Header-TCP Header 窗口扩大
为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项 时间戳
可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文
3>.映射第四层到应用程序
常见的应用层服务被分配的默认端口:
FTP:(TCP)
TELNET:(TCP)
HTTTP:(TCP)
DNS:(TCP,UDP)
TFTP:(UDP)
SNMP:(UDP)
4>.TCP协议PORT
传输层通过port号,确定应用层协议 Port number:
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
-
udp:User Datagram Protocol,无连接的协议
- IANA:互联网数字分配机构(负责域名,数字资源,协议分配)
-:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用,/tcp(ssh), /tcp(http), /tcp(https)
-:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,/tcp(SqlServer), /tcp(oracle),/tcp(mysql),/tcp/udp (memcached)
-:动态端口或私有端口,客户端程序随机使用的端口
其范围的定义:/proc/sys/net/ipv4/ip_local_port_range
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_local_port_range [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_local_port_range
5>.TCP三次握手
client端首先发送一个SYN包(在建立连接时使用,用来同步序号)告诉server端我的初始序列号是X client端收到SYN包后回复给Client一个ACK确认包,告诉Client说我收到了。Server端也需要告诉Client端自己的初始序列号,于是server也发送一个SYN包告诉Client端我的序列化时y。这两个包一起发送。 client收到后,回复server一个ACK确认包说我知道了。 温馨提示:(Linux抓取现有连接状态及排序)
[root@node101.yinzhengjie.org.cn ~]# ss -nt | sed -rn '1!s/^([^ ]+).*/\1/p' | sort | uniq -c
6>.TCP四次挥手
client发送一个FIN包来告诉server需要断开 server端收到后回复一个ACK确认FIN包收到 server在自己也没有数据发送给client后,server也发送一个FIN包给client,表示也无数据发送了 client收到后,就会回复一个ACK确认server的FIN包 温馨提示:
不是只有客户端才能发送断开请求,主动发出Fin包就是主动关闭方,就会进入TIME_WAIT,原因时被动关闭方发来的FIN包需要确认,万一此包丢失,被动关闭方未收到确认会超时重发FIN包,主动关闭方还在,可以重发ACK。
7>.有限状态机FSM:Finite State Machine
CLOSED
没有任何连接状态 LISTEN
侦听状态,等待来自远方TCP端口的连接请求 SYN-SENT
在发送连接请求后,等待对方确认 SYN-RECEIVED
在收到和发送一个连接请求后,等待对方确认 ESTABLISHED
代表传输连接建立,双方进入数据传送状态 FIN-WAIT-
主动关闭,主机已发送关闭连接请求,等待对方确认 FIN-WAIT-
主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求 TIME-WAIT
完成双向传输连接关闭,等待所有分组消失 CLOSE-WAIT
被动关闭,收到对方发来的关闭连接请求,并已确认 LAST-ACK
被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失 CLOSING
双方同时尝试关闭传输连接,等待对方确认
客户端先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时等待接收服务端的报文,该报文会有三种可能:
(1)只有服务端的ACK
只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端的FIN时,回应发送一个ACK,会进入到TIME_WAIT状态,这个状态会持续2MSL(TCP报文段在网络中的最大生存时间, RFC 1122标准的建议值是2min).客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务端在等待超时后会再发送一个FIN给客户端,进而客户端知道ACK已丢失
(2)只有服务端的FIN
只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接收到服务端的ACK时,进入TIME_WAIT状态
(3)基于服务端的ACK,又有FIN
同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态
8>.客户端的典型状态转移
客户端通过connect系统调用主动与服务器建立连接connect系统调用首先给服务器发送一个同步报文段,使连接转移到SYN_SENT状态
此后connect系统调用可能因为如下两个原因失败返回:
、如果connect连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME_WAIT状态的连接所占用(见后文),则服务器将给客户端发送一个复位报文段,connect调用失败。
、如果目标端口存在,但connect在超时时间内未收到服务器的确认报文段,则connect调用失败。
connect调用失败将使连接立即返回到初始的CLOSED状态。如果客户端成功收到服务器的同步报文段和确认,则connect调用成功返回,连接转移至ESTABLISHED状态
当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1状态。若此时客户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2状态。当客户端处于FIN_WAIT_2状态时,服务器处于CLOSE_WAIT状态,这一对状态是可能发生半关闭的状态。此时如果服务器也关闭连接(发送结束报文段),则客户端将给予确认并进入TIME_WAIT状态
客户端从FIN_WAIT_1状态可能直接进入TIME_WAIT状态(不经过FIN_WAIT_2状态),前提是处于FIN_WAIT_1状态的服务器直接收到带确认信息的结束报文段(而不是先收到确认报文段,再收到结束报文段)
处于FIN_WAIT_2状态的客户端需要等待服务器发送结束报文段,才能转移至TIME_WAIT状态,否则它将一直停留在这个状态。如果不是为了在半关闭状态下继续接收数据,连接长时间地停留在FIN_WAIT_2状态并无益处。连接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出了。此时客户端连接由内核来接管,可称之为孤儿连接(和孤儿进程类似)
Linux为了防止孤儿连接长时间存留在内核中,定义了两个内核参数:
/proc/sys/net/ipv4/tcp_max_orphans 指定内核能接管的孤儿连接数目
/proc/sys/net/ipv4/tcp_fin_timeout 指定孤儿连接在内核中生存的时间
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_max_orphans [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_max_orphans
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
9>.TCP协议中的三次握手和四次挥手
10>.客户机端的三次握手和四次挥手
11>.服务器端的三次握手和四次挥手
12>.sync半连接和accept全连接队列
ss –lnt
/proc/sys/net/ipv4/tcp_max_syn_backlog #未完成连接(sync半连接)队列大小,建议调整大小为1024以上
/proc/sys/net/core/somaxconn #完成连接(accept全连接)队列大小,建议调整大小为1024以上
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/core/somaxconn [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/core/somaxconn
13>.TCP超时重传
异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传策略
与TCP超时重传相关的两个内核参数:
/proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
/proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_retries1 [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_retries1
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_retries2 [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_retries2
14>.TCP确认
15>.固定窗口
16>.TCP滑动窗口
17>.拥塞控制
网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。此情况称为拥塞
TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
TCP拥塞控制的标准文档是RFC ,其中详细介绍了拥塞控制的四个部分:慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
当前所使用的拥塞控制算法
/proc/sys/net/ipv4/tcp_congestion_control
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_congestion_control
cubic
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_congestion_control
三.UDP协议
1>.UDP特性
工作在传输层
提供不可靠的网络访问
非面向连接协议
有限的错误检查
传输性能高
无数据恢复特性
2>.UDP包头
UDP报文头部的确很简单,如下图所示。
UDP没有三次握手的繁琐操作,发送数据那是相当的快啊,在网络比较稳定的情况下可以采用UDP协议,比如内网传输数据,其中DNS协议不仅仅是可以使用TCP的53端口,还使用了UDP的53端口。
四.Internet层
1>.Internet Control Message Protocol(简称"ICMP")
它是基于internet层之上一种协议,但并不是传输层协议,因为它压根就没有传输的功能。 ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 通过抓包工具可以发现当ICMP包的类型为""则表示request请求报文,如果类型为""则表示reply回应报文。因此我们可以根据这个特点在服务器端配置相应的策略来实现禁ping的效果。 在Linux系统中,除了上面所说的根据ICMP报文类型编写相应的防火墙策略来实现禁ping的效果,其实也可以直接关闭一个内核参数就可以轻松实现禁ping:
[root@node101.yinzhengjie.org.cn ~]# echo > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@node102.yinzhengjie.org.cn ~]# ping -c 172.30.1.101 #指定ping的次数为10次
PING 172.30.1.101 (172.30.1.101) () bytes of data.
bytes from 172.30.1.101: icmp_seq= ttl= time=0.344 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.531 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.316 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.302 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.374 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.287 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.790 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.314 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.624 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.799 ms --- 172.30.1.101 ping statistics ---
packets transmitted, received, % packet loss, time 9009ms
rtt min/avg/max/mdev = 0.287/0.468/0.799/0.193 ms
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# ping -c 10 172.30.1.101 #指定ping的次数为10次
[root@node102.yinzhengjie.org.cn ~]# ping -c -w 172.30.1.101 #无论是否ping通,只ping一次
PING 172.30.1.101 (172.30.1.101) () bytes of data.
bytes from 172.30.1.101: icmp_seq= ttl= time=0.367 ms --- 172.30.1.101 ping statistics ---
packets transmitted, received, % packet loss, time 0ms
rtt min/avg/max/mdev = 0.367/0.367/0.367/0.000 ms
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# ping -w 172.30.1.101
PING 172.30.1.101 (172.30.1.101) () bytes of data.
bytes from 172.30.1.101: icmp_seq= ttl= time=0.386 ms --- 172.30.1.101 ping statistics ---
packets transmitted, received, % packet loss, time 0ms
rtt min/avg/max/mdev = 0.386/0.386/0.386/0.000 ms
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# ping -c 10 -w 1 172.30.1.101 #无论是否ping通,只ping一次
[root@node102.yinzhengjie.org.cn ~]# ping -s 172.30.1.101 -c #指定ICMP数据为5000字节
PING 172.30.1.101 (172.30.1.101) () bytes of data.
bytes from 172.30.1.101: icmp_seq= ttl= time=0.253 ms --- 172.30.1.101 ping statistics ---
packets transmitted, received, % packet loss, time 0ms
rtt min/avg/max/mdev = 0.253/0.253/0.253/0.000 ms
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# ping -s 5000 172.30.1.101 -c 1 #指定ICMP数据为5000字节
[root@node101.yinzhengjie.org.cn ~]# tcpdump -i enp0s8 icmp #使用tcpdump之抓取ICMP协议的包。从结果上看虽然ping了一次,但是由于一个包最大能传输1500个字节,因此5000个字节被拆除了4个包进行request和reply
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size bytes
::40.069101 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::40.069116 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: icmp
::40.069118 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: icmp
::40.069120 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: icmp
::40.069135 IP node101.yinzhengjie.org.cn > node102.yinzhengjie.org.cn: ICMP echo reply, id , seq , length
::40.069149 IP node101.yinzhengjie.org.cn > node102.yinzhengjie.org.cn: icmp
::40.069156 IP node101.yinzhengjie.org.cn > node102.yinzhengjie.org.cn: icmp
::40.069163 IP node101.yinzhengjie.org.cn > node102.yinzhengjie.org.cn: icmp
[root@node101.yinzhengjie.org.cn ~]# tcpdump -i enp0s8 icmp #使用tcpdump之抓取ICMP协议的包。
[root@node102.yinzhengjie.org.cn ~]# ping -s 192.168.124.14 -f #其实我们也可以使用ping发起flood ping攻击。可以ping一下自己的网卡地址,打开操作系统的任务管理器,观察网卡的使用情况。
PING 192.168.124.14 (192.168.124.14) () bytes of data.
.................................................................................................................................................
...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^X.^@...........................................^C--- 192.168.124.14 ping statistics ---
packets transmitted, received, % packet loss, time 42199ms [root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# ping -s 65507 192.168.124.14 -f #其实我们也可以使用ping发起flood ping攻击。如果XP系统的话消耗的是CPU,如果是XP系统之上消耗的是网卡使用率。这也是DOS攻击的方式之一,当然在生成环境中一般情况下是多台肉鸡同时攻击一台服务器,即DDOS,然而黑客能攻击手段每秒可达到TB级别的(如果你公司购买的流量是TB级别的那真的的很有钱啊)。网络安全我们运维人员不得忽略啊!
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo > /proc/sys/net/ipv4/icmp_echo_ignore_all #禁ping
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #禁ping
[root@node102.yinzhengjie.org.cn ~]# ping -c 172.30.1.101 #由于上面已经警ping了,可以ping10次
PING 172.30.1.101 (172.30.1.101) () bytes of data. --- 172.30.1.101 ping statistics ---
packets transmitted, received, % packet loss, time 9004ms [root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# ping -c 10 172.30.1.101 #由于上面已经警ping了,可以ping10次,并在服务器端使用tcpdump工具。
[root@node101.yinzhengjie.org.cn ~]# tcpdump -i enp0s8 icmp #我们发现只接收到了request请求,但由于我们禁ping啦,导致没有回应报文。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size bytes
::29.524064 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::30.523441 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::31.524017 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::32.524016 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::33.524429 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::34.525335 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::35.525509 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::36.526486 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::37.527528 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
::38.528448 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
[root@node101.yinzhengjie.org.cn ~]# tcpdump -i enp0s8 icmp #我们发现只接收到了request请求
2>.Address Resolution Protocol(简称"ARP")
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。 细心的小伙伴可能也发现了,还有一种特殊的Gratuitous ARP,它是在机器开始的时候发出一种ARP,其目的在于询问局域网中是否有对应的主机使用了当前主机所分配的IP地址,从而避免地址冲突。可以用虚拟机模拟此常见(需要用相应的抓包工具)
C:\Users\yinzhengjie>arp -a #Windows查看ARP列表 接口: 192.168.30.1 --- 0x2
Internet 地址 物理地址 类型
192.168.30.254 ---fa-b2-5b 动态
192.168.30.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.2 --5e--- 静态
224.0.0.22 --5e--- 静态
224.0.0.251 --5e---fb 静态
224.0.0.252 --5e---fc 静态
239.255.255.250 --5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态 接口: 172.30.1.254 --- 0xf
Internet 地址 物理地址 类型
172.30.1.101 ---c1-c7- 动态
172.30.1.102 ---1d-d2- 动态
172.30.1.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.2 --5e--- 静态
224.0.0.22 --5e--- 静态
224.0.0.251 --5e---fb 静态
224.0.0.252 --5e---fc 静态
239.255.255.250 --5e-7f-ff-fa 静态 接口: 172.30.1.1 --- 0x10
Internet 地址 物理地址 类型
172.30.1.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.2 --5e--- 静态
224.0.0.22 --5e--- 静态
224.0.0.251 --5e---fb 静态
224.0.0.252 --5e---fc 静态
239.255.255.250 --5e-7f-ff-fa 静态 接口: 192.168.124.14 --- 0x15
Internet 地址 物理地址 类型
192.168.124.1 --a9-ce-c6- 动态
192.168.124.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.2 --5e--- 静态
224.0.0.22 --5e--- 静态
224.0.0.251 --5e---fb 静态
224.0.0.252 --5e---fc 静态
239.255.255.250 --5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态 C:\Users\yinzhengjie>
C:\Users\yinzhengjie>
C:\Users\yinzhengjie>arp -a #Windows查看ARP列表
[root@node101.yinzhengjie.org.cn ~]# arp -n #Linux查看ARP列表
Address HWtype HWaddress Flags Mask Iface
172.30.1.254 ether 0a:::::0f C enp0s8
10.0.2.2 ether ::::: C enp0s3
172.30.1.102 ether :::1d:d2: C enp0s8
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# arp -n #Linux查看ARP列表
[root@node101.yinzhengjie.org.cn ~]# ip neigh #Linux查看ARP列表方式二
172.30.1.254 dev enp0s8 lladdr 0a:::::0f DELAY
10.0.2.2 dev enp0s3 lladdr ::::: STALE
172.30.1.102 dev enp0s8 lladdr :::1d:d2: STALE
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ip neigh #Linux查看ARP列表方式二
3>.反向ARP
反向ARP是根据源设备MAC地址通过广播获取IP地址的过程的地址解析协议。
4>.Internet 协议特征
运行于 OSI 网络层 面向无连接的协议 独立处理数据包 分层编址 尽力而为传输 无数据恢复功能
5>.IP PDU 报头
IP报文头部信息如下图所示:
版本:
占4位,指 IP 协议的版本目前的IP协议版本号为4
首部长度:
占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是60字节
区分服务:
占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下不使用
总长度:
占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 字节.总长度必须不超过最大传送单元 MTU
标识:
占16位,它是一个计数器,通常,每发送一个报文,该值会加1, 也用于数据包分片,在同一个包的若干分片中,该值是相同的
标志(flag):
占3位,目前只有后两位有意义,分别为DF和MF。
DF:
Don’t Fragment 中间的一位,只有当 DF= 时才允许分片
MF:
More Fragment 最后一位,MF=1表示后面还有分片,MF= 表示最后一个分片
片偏移:
占12位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移以8个字节为偏移单位
生存时间:
占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个bit字段.推荐的初始值由分配数字RFC指定,当前值为.发送ICMP回显应答时经常把TTL设为最大值255。
协议:
占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为ICMP协议, 2表示为IGMP协议, 6表示为TCP协议,17表示为UDP协议
首部检验和:
占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法
源地址和目的地址:
都各占4字节,分别记录源地址和目的地址
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_default_ttl #查看Linux默认的TTL [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo > /proc/sys/net/ipv4/ip_default_ttl #我们将Linux的TTL修改成和Windows一样的TTL,这样别人ping咱们Linux服务器默认还以为咱们使用的是windows呢~
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_default_ttl [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_default_ttl #查看Linux默认的TTL
[root@node102.yinzhengjie.org.cn ~]# ping -c 172.30.1.101 #使用Linux默认的TTL,ping该机器观察ttl的值。
PING 172.30.1.101 (172.30.1.101) () bytes of data.
bytes from 172.30.1.101: icmp_seq= ttl= time=0.289 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.555 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.360 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.284 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.302 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.302 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.685 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.809 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.691 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.385 ms --- 172.30.1.101 ping statistics ---
packets transmitted, received, % packet loss, time 9007ms
rtt min/avg/max/mdev = 0.284/0.466/0.809/0.190 ms
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# ping -c 172.30.1.101 #由于我上面将该机器的TTL修改为128,再次去ping观察ttl的值。
PING 172.30.1.101 (172.30.1.101) () bytes of data.
bytes from 172.30.1.101: icmp_seq= ttl= time=0.217 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.322 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.437 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.534 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.757 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.401 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.726 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.285 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.750 ms
bytes from 172.30.1.101: icmp_seq= ttl= time=0.443 ms --- 172.30.1.101 ping statistics ---
packets transmitted, received, % packet loss, time 9008ms
rtt min/avg/max/mdev = 0.217/0.487/0.757/0.188 ms
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# ping -c 10 172.30.1.101 #使用Linux默认的TTL,ping该机器观察ttl的值。
6>.IP PDU 报头示例
片偏移以8个字节为偏移单位,假定MTU= 三个包标识 ID都相同,三个包DF都为0,前两个MF=,最后一个MF=0
7>.IP报文头部协议域
[root@node102.yinzhengjie.org.cn ~]# cat /etc/protocols #记录了哪个协议对应的数字编号,这个定义是由国际组织IANA来定义的。
# /etc/protocols:
# $Id: protocols,v 1.11 // :: ovasik Exp $
#
# Internet (IP) protocols
#
# from: @(#)protocols 5.1 (Berkeley) //
#
# Updated for NetBSD based on RFC , Assigned Numbers (July ).
# Last IANA update included dated --
#
# See also http://www.iana.org/assignments/protocol-numbers ip IP # internet protocol, pseudo protocol number
hopopt HOPOPT # hop-by-hop options for ipv6
icmp ICMP # internet control message protocol
igmp IGMP # internet group management protocol
ggp GGP # gateway-gateway protocol
ipv4 IPv4 # IPv4 encapsulation
st ST # ST datagram mode
tcp TCP # transmission control protocol
cbt CBT # CBT, Tony Ballardie <A.Ballardie@cs.ucl.ac.uk>
egp EGP # exterior gateway protocol
igp IGP # any private interior gateway (Cisco: for IGRP)
bbn-rcc BBN-RCC-MON # BBN RCC Monitoring
nvp NVP-II # Network Voice Protocol
pup PUP # PARC universal packet protocol
argus ARGUS # ARGUS
emcon EMCON # EMCON
xnet XNET # Cross Net Debugger
chaos CHAOS # Chaos
udp UDP # user datagram protocol
mux MUX # Multiplexing protocol
dcn DCN-MEAS # DCN Measurement Subsystems
hmp HMP # host monitoring protocol
prm PRM # packet radio measurement protocol
xns-idp XNS-IDP # Xerox NS IDP
trunk- TRUNK- # Trunk-
trunk- TRUNK- # Trunk-
leaf- LEAF- # Leaf-
leaf- LEAF- # Leaf-
rdp RDP # "reliable datagram" protocol
irtp IRTP # Internet Reliable Transaction Protocol
iso-tp4 ISO-TP4 # ISO Transport Protocol Class
netblt NETBLT # Bulk Data Transfer Protocol
mfe-nsp MFE-NSP # MFE Network Services Protocol
merit-inp MERIT-INP # MERIT Internodal Protocol
dccp DCCP # Datagram Congestion Control Protocol
3pc 3PC # Third Party Connect Protocol
idpr IDPR # Inter-Domain Policy Routing Protocol
xtp XTP # Xpress Tranfer Protocol
ddp DDP # Datagram Delivery Protocol
idpr-cmtp IDPR-CMTP # IDPR Control Message Transport Proto
tp++ TP++ # TP++ Transport Protocol
il IL # IL Transport Protocol
ipv6 IPv6 # IPv6 encapsulation
sdrp SDRP # Source Demand Routing Protocol
ipv6-route IPv6-Route # Routing Header for IPv6
ipv6-frag IPv6-Frag # Fragment Header for IPv6
idrp IDRP # Inter-Domain Routing Protocol
rsvp RSVP # Resource ReSerVation Protocol
gre GRE # Generic Routing Encapsulation
dsr DSR # Dynamic Source Routing Protocol
bna BNA # BNA
esp ESP # Encap Security Payload
ipv6-crypt IPv6-Crypt # Encryption Header for IPv6 (not in official list)
ah AH # Authentication Header
ipv6-auth IPv6-Auth # Authentication Header for IPv6 (not in official list)
i-nlsp I-NLSP # Integrated Net Layer Security TUBA
swipe SWIPE # IP with Encryption
narp NARP # NBMA Address Resolution Protocol
mobile MOBILE # IP Mobility
tlsp TLSP # Transport Layer Security Protocol
skip SKIP # SKIP
ipv6-icmp IPv6-ICMP # ICMP for IPv6
ipv6-nonxt IPv6-NoNxt # No Next Header for IPv6
ipv6-opts IPv6-Opts # Destination Options for IPv6
# # any host internal protocol
cftp CFTP # CFTP
# # any local network
sat-expak SAT-EXPAK # SATNET and Backroom EXPAK
kryptolan KRYPTOLAN # Kryptolan
rvd RVD # MIT Remote Virtual Disk Protocol
ippc IPPC # Internet Pluribus Packet Core
# # any distributed file system
sat-mon SAT-MON # SATNET Monitoring
visa VISA # VISA Protocol
ipcv IPCV # Internet Packet Core Utility
cpnx CPNX # Computer Protocol Network Executive
cphb CPHB # Computer Protocol Heart Beat
wsn WSN # Wang Span Network
pvp PVP # Packet Video Protocol
br-sat-mon BR-SAT-MON # Backroom SATNET Monitoring
sun-nd SUN-ND # SUN ND PROTOCOL-Temporary
wb-mon WB-MON # WIDEBAND Monitoring
wb-expak WB-EXPAK # WIDEBAND EXPAK
iso-ip ISO-IP # ISO Internet Protocol
vmtp VMTP # Versatile Message Transport
secure-vmtp SECURE-VMTP # SECURE-VMTP
vines VINES # VINES
ttp TTP # TTP
nsfnet-igp NSFNET-IGP # NSFNET-IGP
dgp DGP # Dissimilar Gateway Protocol
tcf TCF # TCF
eigrp EIGRP # Enhanced Interior Routing Protocol (Cisco)
ospf OSPFIGP # Open Shortest Path First IGP
sprite-rpc Sprite-RPC # Sprite RPC Protocol
larp LARP # Locus Address Resolution Protocol
mtp MTP # Multicast Transport Protocol
ax. AX. # AX. Frames
ipip IPIP # Yet Another IP encapsulation
micp MICP # Mobile Internetworking Control Pro.
scc-sp SCC-SP # Semaphore Communications Sec. Pro.
etherip ETHERIP # Ethernet-within-IP Encapsulation
encap ENCAP # Yet Another IP encapsulation
# # any private encryption scheme
gmtp GMTP # GMTP
ifmp IFMP # Ipsilon Flow Management Protocol
pnni PNNI # PNNI over IP
pim PIM # Protocol Independent Multicast
aris ARIS # ARIS
scps SCPS # SCPS
qnx QNX # QNX
a/n A/N # Active Networks
ipcomp IPComp # IP Payload Compression Protocol
snp SNP # Sitara Networks Protocol
compaq-peer Compaq-Peer # Compaq Peer Protocol
ipx-in-ip IPX-in-IP # IPX in IP
vrrp VRRP # Virtual Router Redundancy Protocol
pgm PGM # PGM Reliable Transport Protocol
# # any -hop protocol
l2tp L2TP # Layer Two Tunneling Protocol
ddx DDX # D-II Data Exchange
iatp IATP # Interactive Agent Transfer Protocol
stp STP # Schedule Transfer
srp SRP # SpectraLink Radio Protocol
uti UTI # UTI
smp SMP # Simple Message Protocol
sm SM # SM
ptp PTP # Performance Transparency Protocol
isis ISIS # ISIS over IPv4
fire FIRE
crtp CRTP # Combat Radio Transport Protocol
crudp CRUDP # Combat Radio User Datagram
sscopmce SSCOPMCE
iplt IPLT
sps SPS # Secure Packet Shield
pipe PIPE # Private IP Encapsulation within IP
sctp SCTP # Stream Control Transmission Protocol
fc FC # Fibre Channel
rsvp-e2e-ignore RSVP-E2E-IGNORE
mobility-header Mobility-Header # Mobility Header
udplite UDPLite
mpls-in-ip MPLS-in-IP
manet manet # MANET Protocols
hip HIP # Host Identity Protocol
shim6 Shim6 # Shim6 Protocol
wesp WESP # Wrapped Encapsulating Security Payload
rohc ROHC # Robust Header Compression
# - Unassigned [IANA]
# Use for experimentation and testing [RFC3692]
# Use for experimentation and testing [RFC3692]
# Reserved [IANA]
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# cat /etc/protocols | wc -l [root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]#
[root@node102.yinzhengjie.org.cn ~]# cat /etc/protocols #记录了哪个协议对应的数字编号,这个定义是由国际组织IANA来定义的。
8>.IP地址详解
博主推荐阅读:
https://www.cnblogs.com/yinzhengjie/p/11854562.html
五.主机到主机的包传递(数据包的通讯过程,其实抓个包就知道了,下图画的就比较人性化而且忽略了路由,ARP,DNS,实际情况可能比较复杂,比如涉及到HTTP请求过程)
1>.客户端发送SYN给服务端
2>.客户端开始编写部分数据包报文
3>.编写帧报文需要目标地址的mac,检查客户端主机的ARP表,查询是否有对应的记录关系
4>.将自己的mac地址封装
5>.开始ARP广播以获得对端的mac地址
6>.目标服务端收到广播
7>.收到数据帧后进行拆解
8>.将接收到的结果(源地址及MAC信息)添加到当前操作系统
9>.开始编写数据帧想要告诉对方自己的mac地址
10>.将自己编写的数据帧发送给对端主机进行响应
11>.等待接收ARP消息
12>.从广播中捕捉到属于当前主机的消息
13>.将收到的消息解封装之后把对应的IP及mac添加到操作系统中的ARP表
14>.将获取到的目标MAC地址继续编写数据帧并发送
15>.目标主机接收到数据帧后进行拆封获取到SYN信息
16>.收到SYN信息后开始响应对方,发送ACK来建立连接
17>.客户端收到服务端响应的ACK消息
18>.客户端收到消息后需要响应服务端0
19>.TCP三次握手建立成功
20>.客户端开始发送数据
21>.服务端接收到数据
22>.继续响应客户端说自己接收到数据
计算机网络基础之TCP/IP 协议栈的更多相关文章
- 【计算机网络基础】TCP/IP、HTTP、Socket的概念
TCP/IP协议是一个协议簇.里面包括很多协议的.UDP也是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.(资料来源: http://www.cnb ...
- UNIX/Linux网络编程基础:图解TCP/IP协议栈
目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...
- -1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp
计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程 ...
- TCP/IP协议栈---网络基础篇(3)
TCP/IP协议栈 在网络中实际使用的是TCP/IP,OSI是参考模型. TCP/IP协议栈 – 是由一组不同功能的协议组合在一起构成的协议栈 – 利用一组协议完成OSI所实现的功能 应用层协议 传输 ...
- 【转】TCP/IP协议栈及OSI参考模型详解
OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...
- 渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)
前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅.在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握. ...
- TCP/IP协议栈及OSI参考模型详解
OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...
- 浅谈TCP IP协议栈(一)入门知识【转】
说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...
- TCP/IP 协议栈及 OSI 参考模型详解
OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...
随机推荐
- jQuery prop方法替代attr方法
jquery attr()方法获取标签的 checked 会有问题,所以用了 prop() 方法.
- typescript导入图片报找不到模块的错误
https://www.cnblogs.com/chen-cong/p/10445635.html images.d.ts: declare module '*.svg' declare module ...
- java main方法
1.问题:Java main方法为什么是 public static void main(String[] args)??? 序号 场景 编译 运行 解释 1 public修改为private pr ...
- 处理html换行问题
String.prototype.replaceAll = function (FindText, RepText) { regExp = new RegExp(FindText, "g&q ...
- Python之颜色的表示
字背景颜色范围:40----49 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色 字颜色:30-----------39 30:黑 31:红 32:绿 33 ...
- setdefault函数的用法及理解
setdefault函数的用法及理解 dict.setdefault(key, default=None) 功能:如果键不存在于字典中,将会添加该键并将default的值设为该键的默认值,如果键存在于 ...
- DRF框架(六)——三大认证组件之认证组件、权限组件
drf认证组件 用户信息表 from django.db import models from django.contrib.auth.models import AbstractUser class ...
- UI单据按钮点击事件校验
一.按钮点击前事务处理<BeforeEventProcess> public override void BeforeEventProcess(IPart part, string eve ...
- linux tomcat开机自启/nginx开机自启
修改/etc/rc.d/rc.local文件,修改完成后需执行以下指令才能正常自启动 chmod +x /etc/rc.d/rc.local #!/bin/bash # THIS FILE IS AD ...
- WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里?
原文:WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里? 在 WPF 程序中,我们有 Mouse.GetPosition(IInputElement relativeTo) 方法可以拿到鼠标 ...