笔试总结——计算机网络篇【持续更新】
2016-03-26 15:59
363 查看
返回RST包的各种情况
(复位报文—)(连接起来是FIN 未连接起来是RST)1 端口未打
开
服务器程序端口未打开而客户端来连接。这种情况是最为常见和好理解的一种了。去telnet一个未打开的TCP
的端口可能会出现这种错误。这个和操作系统的实现有关。在某些情况下,操作系统也会完全不理会这些发到未打开端口请求。
比如在下面这种情况下,主机 241
向主机 114 发送一个 SYN 请求,表示想要连接主机114的40000
端口,但是主机 114上根本没有打开40000这个端口,于是就向主机
241发送了一个 RST 。这种情况很常见。特别是服务器程序
core dump之后重启之前连续出现RST的情况会经常发生
。
当然在某些操作系统的主机上,未必是这样的表现。比如向一台WINDOWS7的主机发送一个连接不存在的端口的请求,这台主机就不会回应。
2 请求超 时
曾经遇到过这样一个情况:一个客户端连接服务器,connect
返回 -1 并且 error=EINPROGRESS。
直接telnet发现网络连接没有问题。 ping没有出现丢包。用抓包工具查看,客户端是在收到服务器发出的SYN之后就莫名其妙的发送了RST
。
比如像下面这样 :
有 89、27两台主机。主机
89 向主机27发送了一个SYN
,表示希望连接 8888端口,主机27回应了主机
89 一个SYN表示可以连接。但是主机27
却很不友好,莫名其妙的发送了一个RST表示我不想连接你了。
后来经过排查发现,在主机89上的程序在建立了socket
之后,用 setsockopt的 SO_RCVTIMEO
选项设置了 recv 的超时时间为 100ms 。而我们看上面的抓包结果表示,从主机89
发出 SYN 到接收 SYN的时间多达
110ms。(从 15:01:27.799961到
15:01:27.961886,小数点之后的单位是微秒)。因此主机89
上的程序认为接收超时,所以发送了RST拒绝进一步发送数据。http://write.blog.csdn.net/postedit
3 提前关 闭
关于 TCP ,我想我们在教科书里都读到过一句话,'TCP是一种可靠的连接'
。 而这可靠有这样一种含义,那就是操作系统接收到的来自TCP连接中的每一个字节,我都会让应用程序接收到。如果应用程序不接收怎么办?你猜对了,RST。
4 在一个已关闭的
socket 上收到数 据
如果某个
socket 已经关闭,但依然收到数据也会产生 RST 。
TCP当中的拥塞控制算法
TCP当中的拥塞控制算法,慢开始门限设置为出现拥塞时的发送窗口大小的一半。因此发生拥塞时候,慢开始门限设置为8/2=4,然后把拥塞窗口设置为1,执行慢开http://write.blog.csdn.net/postedit始算法。当然收到单个确认但此确认多个数据报的时候就加相应的数值。所以一次传输轮次之后拥塞窗口就加倍。这就是乘法增长。1->2->4,经过两个来回,到达门限值4, 拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口加1,而不是加倍。这样拥塞窗口按线性规律缓慢增长。4->5->6...->10,而发送端不能超过接收端10,因此最后为10
知识点:
当cwnd(拥塞窗口值)<ssthresh(慢开始门限值)时,使用慢开始算法。加倍增长
当cwnd>ssthresh时,改用拥塞避免算法。加1线性增长
当cwnd=ssthresh时,慢开始与拥塞避免算法任意。
建立动态路由需要用到的文件
/etc/hosts 主机名->IP地址映射文件/etc/resolv.conf DNS服务配置文件
/etc/gateways 建立动态路由需要用到的文件
show各种网络参数
show frame-relay map查看帧中网络的映射地址show frame-relay pvc查看pvc状态:delete static inactive active
show frame=relay lmi查看本地路由和真是交换机的状态消息数量,LMI数据统计
show interface查看接口的物理层和链路层信息,包括数据包的封装类型
网络协议所在层
物理层: RJ45 、
CLOCK 、 IEEE802.3 (中继器,集线器,网关)
-
数据链路: PPP 、
FR 、HDLC、 VLAN 、
MAC (网桥,交换机)-
网络层: IP 、
ICMP 、ARP、 RARP
、 OSPF 、IPX 、
RIP 、 IGRP 、 (路由器) -
传输层: TCP 、
UDP 、SPX-
会话层: NFS 、
SQL 、NETBIOS、 RPC
-
表示层: JPEG 、
MPEG 、ASII-
应用层: FTP 、
DNS 、Telnet、 SMTP
、 HTTP 、WWW 、
NFS
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:
ICMP协议
ICMP是(Internet Control Message Protocol)Internet控制报文
协议。它是
TCP/IP协议族 的一个子协议,用于在IP
主机 、
路由 器之间传递控制消息。控制消息是指
网络通 不通、
主机 是否可达、
路由 是否可用等网络本身的消息
在IPv4协议中最常用的ICMP消息类型有以下几种:
•
回显应答(类型0)和回显请求(类型8):这是Ping程序发送的信息。
•目标不可达(类型3)
•源抑制(类型4):这是一种用于通知发送者路由器或者主机出现阻塞现象的ICMP消息,发送者需要降低发送速度。
•重定向(类型5):这个消息用来向可以访问两台路由器的主机说“请使用另一台路由器”。
•路由器信息应答(类型9)和路由器信息请求(类型10)
•超时(类型11):这个消息有两种用途。第一,当超过IP生存期时向发送系统发出错误信息。第二,如果分段的IP数据报没有在某种时限内重新组合,这个消息将通知发送系统。
是ping命令使用的协议
http keep-alive
1.当Server的静态资源(css 、html、js、img)较多时,打开keep-alive的开关能够显著减少建立tcp连接的 cpu时间消耗2. 当Server的请求大多为动态请求(数据库访问或者I/O较多)时,keep-alive关闭比较好,能够节省一定 的内存,同时节省的内存可以用来作为cache,降低I/O压力
3. 基于以上分析,当Server多为动态请求时,尽量关闭keep-alive
4.可以在服务器端设置是否支持keep-alive
在HTTP/1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP/1.0协议上,如果客户端浏览器支持Keep-Alive,那么就在HTTP请求头中添加一个字段 Connection: Keep-Alive, 当服务器收到附带有Connection: Keep-Alive的请求时,它也会在响应头中添加一个同样的字段来使用Keep-Alive。这样一来,客户端和服务器之间的HTTP连接就会被保
持,不会断开(超过Keep-Alive规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接
HTTP/1.1
在HTTP/1.1版本中,官方规定的Keep-Alive使用标准和在HTTP/1.0版本中有些不同,默认情况下所在HTTP1.1中所有 连接都被保持,除非在请求头或响应头中指明要关闭:Connection: Close ,这也就是为什么Connection: Keep-Alive字段再没有意义的原因。另外,还添加了一个新的字段Keep-Alive:,因为这个字段并没有详细描述用来做什么,可忽略它
Not reliable(不可靠)
HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。另外,Keep-Alive也不能保证客户端和服 务器之间的连接一定是活跃的,在HTTP1.1版本中也如此。唯一能保证的就是当连接被关闭时你能得到一个通知,所以不应该让程序依赖于Keep- Alive的保持连接特性,否则会有意想不到的后果
tcp套接字中不会阻塞的是
首先,服务器端启动进程,调用Socket创建一个基于TCP协议的流套接字描述符。其次,服务进程调用bind命名套接字,将套接字描述符绑定到本地地址和本地端口上。
再次,服务器端调用listen,开始侦听客户端的Socket连接请求。
接下来阻塞,直到收到了客户端的connect请求,调用accept进行相应。因此,不阻塞bind和listen
属于ifconfig命令作用范围
A 配置本地回环地址B 配置网卡的IP地址C 激活网络适配器广播地址
广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。17表示掩码前面有17位1,后15位是0 (总共32位)
10.1.0.1 跟 17位1的掩码进行与操作 10 , 1, 0, 1 各表示成8位的2进制 , 得到10.1.0.0
然后把15全部补成1, 得到 10.1.127.255
ISDN用户在网路接口处的接入通路的类型
▲B通路:具有定时的64Kbit/s通路,用于传递广泛的各种用户信息流,不传递ISDN电路交换的信令信息。▲D通路:主要用于传递ISDN电路交换的信令信息,也可以传递遥信信息和分组交换数 据。D通路可以有不同的比特率,
▲H通路:H通路有以下几种传输速率:
H0通路:384Kbit/s
H11通路:1536 Kbit/s
H12通路:1920 Kbit/s
H通路用于传递各种用户信息流,例如高速传真、电视影像、高质量音频或声音节目、高速数据、分组交换信息等,不传递ISDN电路交换的信令信息。
现有一完全的P2P共享协议,每次两个节点通讯后都能获取对方已经获取的全部信息,现在使得系统中每个节点都知道所有节点的文件信息所需次数
假设有n个节点,直观的按照1-2-···-(n-1)-n传播顺序,最后n-1和n获得了所有节点的信息,然后取其中任一节点与1、2、···、n-2这些节点交换信息,即可让所有节点获得所有信息,这样通讯次数=n-1+n-2=2n-3;如果分成两个组呢,假设两个组的节点个数分别为n1和n2,则每个组首先需要按序传播信息N1=n1-1+n2-1,然后第一组最后两个节点和第二组的最后两个节点就获得了各自组的所有信息,这四个节点两两交换信息,需要N2=2次,则这四个节点获得了两个组所有节点信息,然后取任一节点与每个组剩下的节点(分别是n1-2,n2-2)交换信息N3=n1-2+n2-2,则通讯任务完成,总共通讯次数N=N1+N2+N3=2n1-3+2n2-3+2=2(n1+n2)-4=2n-4;
如果分成三个组,同样的分析N=2n1-3+2n2-3+2n3-3+6=2n-3,其中6表示三个组的最后两个节点交换信息需要6次;
那如果分的组数更多呢,假设分为g组(g>=4),同上分析N=2n-3g+M,其中M表示g个组的最后两个节点交换信息所需要的最少次数。假设把这些点的通讯按照两个组的模式来处理,则M=2*(2g-4),N=2n+g-8>=2n-4。假设按三个组的模式来处理,则M=2*(2g-3),N=2n+g-6>=2n-2,可见它们都是大于等于2n-4,而且随着g的变大通讯次数也会增多。
所以最优的情况就是在分成两个组或者四个组的时候取到,最优情况下通讯次数为2n-4.
帧中继
帧中继( Frame Relay)是一种用于连接计算机系统的面向分组的通信方法。它主要用在公共或专用网上的局域网互联以及广域网连接。大多数公共电信局都提供帧中继服务,把它作为建立高性能的虚拟广域连接的一种途径。帧中继是进入带宽范围从56Kbps到1.544Mbps的广域分组交换网的用户接口。帧中继是一个提供连接并且能够支持多种协议、多种应用的多个地点之间进行通信的广域网技术,它定义了在公共数据网上发送数据的流程,属于高性能、高速率的数据连接技术。
帧中继提供的是数据链路层和物理层的协议规范,任何高层协议都独立于帧中继协议,因此,大大地简化了帧中继的实现。帧中继的主要应用之一是局域网互联,特别是在局域网通过广域网进行互联时,使用帧中继更能体现它的低网络时延、低设备费用、高带宽利用率等优点。帧中继是一种先进的广域网技术,实质上也是分组通信的一种形式,只不过它将X.25分组网中分组交换机之间的恢复差错、防止阻塞的处理过程进行了简化。
通过网络发送该数据时,正确的发送顺序
网络端一般是大端,大端,大端最高字节在地址低位,低字节在地址高位,所以要调整顺序为B如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章
因为UDP要达到TCP的功能就必须实现拥塞控制的功能,而且是在路由之间实现,这个在底层明显是做不到拥塞控制的,在应用层也是做不到的,因为应用层之间和应用程序挂钩,一般只能操控主机的程序,而表示层是处理所有与数据表示及运输有关的问题,包括转换、加密和压缩,在传输层是不可能的,因为你已经使用了UDP协议,无法在本层转换它,只有在会话层.会话层(SESSION LAYER)允许不同机器上的用户之间建立会话关系。会话层循序进行类似的
传输层
的普通数据的传送,在某些场合还提供了一些有用的增强型服务。允许用户利用一次会话在远端的分时系统上登陆,或者在两台机器间传递文件。 会话层提供的服务之一是管理对话控制。会话层允许信息同时双向传输,或任一时刻只能单向传输。如果属于后者,类似于物理信道上的半双工模式,会话层将记录此时该轮到哪一方
相关文章推荐
- 20159320《网络攻防实践》第4周教材学习总结
- ADCD 1.9 ZOS 配置 CTCI-W32 TCPIP 网络
- CentOS 7 下安装 SVN (HTTPS + SSH)
- 借助matlab神经网络工具箱实现蠓虫分类
- Cocoa Touch(五):网络请求 NSURLSession/AFNetworking, GCD, NSURLResquest
- VirtualBox中centos网络配置
- HttpClient抓取网页返回乱码的解决办法
- 防御型体系:一种新的网络安全体系架构
- 使用HttpURLConnection 与 sae 进行数据交互
- HTTP Servlet 重要的几个方法
- TCP/IP 协议详解
- Kubernetes网络配置方案
- $POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
- 最详细的Log4j使用教程-http://www.codeceo.com/article/log4j-usage.html
- Okhttp封装、网络层扩展
- 获取手机网络连接状态
- 【BZOJ3651】网络通信
- 【PA2014】【BZOJ3716】Muzeum
- 如何在你写的应用中跳转到手机系统网络设置页面去,看别人应用代码的时候看到的
- STC89C52单片机串口调试(http://blog.sina.com.cn/s/blog_7cae472801015idp.html)