计算机网络常见知识点

内容会持续更新,有错误的地方欢迎指正,谢谢!

0.TCP连接有多少种状态?怎样查看TCP连接状态

总共有11种状态,如下图。一个正常的TCP连接,都会有三个阶段:三次握手、数据传送、四次挥手。

这里写图片描述

三次握手中涉及到4个状态;四次挥手中涉及到6+1个状态,最后加的那个1是CLOSING状态,很少见,图中也没有。

如何查看:netstat -nat|awk '{print $6}'|sort|uniq -c|sort -rn

输出结果如下:

150 ESTABLISHED
 22 TIME_WAIT
 15 LAST_ACK
 8  CLOSE_WAIT
 4  LISTEN

右上可看出,当前网络下TCP连接处于ESTABLISHED、TIME_WAIT、LAST_ACK、CLOSE_WAIT、LISTEN状态的分别有150、22、15、8、4个。 这些都是TCP连接最常见的几种状态。
其中,常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。

1.三次握手与四次挥手

(1)序号:seq序号,发起方发送数据时对此进行标记。
(2)确认序号:ack序号,只有标志位ACK为1时,确认序号才有效,ack=seq+1。
(3)标志位:共6个:

  1. URG:紧急指针(urgent pointer)有效。
  2. ACK:确认序号有效。
  3. PSH:接收方应该尽快将这个报文交给应用层。
  4. RST:重置连接。
  5. SYN:发起一个新连接。
  6. FIN:释放一个连接。

(1) 三次握手(我要和你建立链接,你真的要和我建立链接么,我真的要和你建立链接,成功!

SYN:发起一个新连接。将标志位SYN置为1
seq: 序号。随机产生一个值seq=J
ACK:确认序号有效。将标志位SYN置为1
ack: 确认序号。等于seq+1

这里写图片描述

(2) 四次挥手(我要和你断开链接;好的,断吧。我也要和你断开链接;好的,断吧。

FIN释放一个连接。seq为M。
ACK=1。ack=seq+1。
FIN释放一个连接。seq为N。
ACK=1。ack=seq+1。

下图有两个错误:第二次传输没加ACK=1 ;最后一次传输ack=N+1。

这里写图片描述

2.为什么TCP链接需要三次握手,两次不可以么?

客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。
这时,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,那么只要Server发出确认数据包,由于没有第三次握手,所以新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。
若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立链接。

3.有哪些应用层协议是基于TCP的,哪些是基于UDP的

TCP :FTP、HTTP、Telnet、SMTP、POP3、HTTPS
UDP:DNS、SNMP、NFS

4.TCP与UDP的区别

TCP提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。

UDP不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如QQ就是使用的UDP协议。

传输控制协议TCP (Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)都属于传输层协议,它们之间的区别包括:

  1. TCP是面向连接的,UDP是无连接的;
  2. TCP是可靠的,UDP是不可靠的;
  3. TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
  4. TCP是面向字节流的,UDP是面向报文的;
  5. TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;
  6. TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;

流式套接字:是以TCP协议为代表的一类套接字,它表示数据以流的形式存在,上一个数据流与下一个数据流没有一个明显的分界线,也就是说你连续发来两个包,接受端可能只接受到一个,需要自己区分包的边界。

数据报套接字:是以UDP为代表,表明数据报与数据报之间有明显的分界线,发送方发送几个包,接受端就能接受到几个包,但网络传输过程会丢包。

5.TCP粘包的原因和如果不粘包

TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

为什么出现粘包现象?

  1. 发送方原因
    我们知道,TCP默认使用Nagle算法。而Nagle算法会收集多个小分组,在一个确认到来时一起发送。所以,正是Nagle算法造成了发送方有可能造成粘包现象。
  2. 接收方原因
    TCP接收到分组时,并不会立刻送至应用层处理,或者说,应用层并不一定会立即处理;实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。这样一来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包。

解决方法:(主要从发送端来解决问题)

  1. 发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度。
  2. 发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就可以把数据包拆分开了。
  3. 发送端可以在数据包之间设置边界,如添加特殊符号。
6.UDP丢包的原因和如何不丢包

原因和对应的方法:

  1. 接收端处理时间过长导致丢包,对于这种情况可以修改接收端,将包接收后存入一个缓冲区。
  2. 发送的包巨大丢包,这种情况需要切割成小包再逐个send。
  3. 发送的包较大,超过接受者缓存导致丢包,这种情况可以设置socket接收缓冲,以前“我”把接收缓冲设置成64K就解决了。
  4. 发送的包频率太快,这种情况也有时可以通过设置socket接收缓冲解决,但有时解决不了,所以在发送频率过快的时候还是考虑sleep一下吧。
  5. 局域网内不丢包,公网上丢包,这种情况“我”也是通过切割小包并sleep发送解决的。

如果用上述几个方法都解决不了,还有这个几个方法:

  1. 多线程:在单线程的版本中,当接收完毕后便将数据写入到文件中,这个操作很耗费时间,当有新的数据过来时,程序依然在执行写入操作,来不及接受新过来的数据,因此造成丢包。开辟了一个新的线程负责将数据写入到文件,原来的线程只负责接收数据,两个线程之间用事件(Event)来同步。
  2. 要么减小流量
  3. 要么换TCP协议传输
  4. 要么做丢包重传的工作。
7.网络游戏采用的是TCP协议还是UDP协议?

看你要做什么游戏
如果是由客户端间歇性的发起无状态的查询,并且偶尔发生延迟是可以容忍,那么使用HTTP/HTTPS吧。
如果客户端和服务器都可以独立发包,但是偶尔发生延迟可以容忍(比如:在线的纸牌游戏,许多MMO类的游戏),那么使用TCP吧。
如果客户端和服务器都可以独立发包,而且无法忍受延迟(比如:大多数的多人动作类、MOBA类、一些MMO类游戏),那么使用UDP吧。

可以容忍延迟并且有很好的屏蔽延迟的设计,如纸牌类和MMO,用TCP
不能容忍延迟,如DOTA类和动作类,用UDP
事实上,还是TCP在游戏中用的多,因为它可靠。

8.Http和Https的区别

Http和Https都是建立在TCP之上的协议。Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。

二者之间存在如下不同:

  1. 端口不同:Http与Https使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
  2. 资源消耗不同:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
  3. 钱的开销:Https通信需要证书,而证书一般需要向认证机构购买;
  4. Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。
9.HTTP常见常见状态码及原因短语

400:Bad Request,请求有语法问题
403:拒绝请求
404:客户端所访问的页面不存在

500 :服务器内部错误

10.长连接和短连接

HTTP的长连接和短连接本质上是TCP长连接和短连接。
长连接:能保持长时间连接特性;
短连接:客户端和服务器每次传输数据都要建立一次连接,任务结束就中断连接。

11.套接字socket

这里写图片描述

这里写图片描述

TCP/IP协议族包括运输层、网络层、链路层,而Socket所在位置如图,Socket是应用层与TCP/IP协议族通信的中间抽象层,它是一组网络通信接口,应用层通过调用这些接口实现发送和接收数据。
指定了IP和端口,Socket就变成了独一无二的”电话号码“了,两个”电话号码“就可以互相传送数据了。

参考

【1】计算机网络面试问题集锦
http://blog.csdn.net/justloveyou_/article/details/78303617
【2】UDP丢包原因
http://www.cnblogs.com/mengyan/archive/2012/10/04/2711340.html

计算机网络相关知识、网络结构等等。 序言 前言 第1章 引言 1.1 计算机网络的产生和发展 1.2 计算机网络的功能 1.3 计算机网络分类 1.3.1 局域网 1.3.2 城域网 1.3.3 广域网 1.3.4 互联网 1.3.5 无线网 1.4 网络体系结构 1.4.1 协议分层 1.4.2 服务类型 1.4.3 服务原语 1.5 ISO/OSI参考模型 1.5.1 参考模型 1.5.2 模型评价 1.6 本书的结构 第一部分 数据通信 第2章 数据通信基础知识 2.1 基本概念 2.1.1 信号与通信 2.1.2 模拟通信 2.1.3 数字通信 2.2 数据通信基础理论 2.2.1 信号的频谱和带宽 2.2.2 信道的截止频率与带宽 2.2.3 信道的最大数据传输率 2.3 传输介质 2.3.1 双绞线 2.3.2 同轴电缆 2.3.3 光纤 2.3.4 无线介质 2.4 多路复用 2.4.1 频分多路复用 2.4.2 波分多路复用 2.4.3 时分多路复用 2.5 数据交换技术 2.5.1 电路交换 2.5.2 报文交换 2.5.3 分组交换 2.6 调制解调器 2.6.1 调制方式 2.6.2 Modem标准 2.6.3 Modem分类 2.6.4 工作模式 2.7 小结 习题 第3章 物理层接口 3.1 RS-232-C接口 3.1.1 机械特性 3.1.2 电气特性 3.1.3 功能特性 3.1.4 过程特性 3.1.5 空Modem电缆 3.2 其他接口 3.2.1 RS-449接口 3.2.2 RS-530接口 3.3 小结 习题 第二部分 底层物理网络 第4章 广域网 4.1 广域网结构 4.1.1 虚电路和数据报 4.1.2 两者比较 4.2 广域网实例 4.2.1 PSTN 4.2.2 X.25 4.2.3 DDN 4.2.4 帧中继 4.2.5 SMDS 4.2.6 B-ISDN/ATM 4.3 各广域网的比较 4.4 小结 习题 第5章 局域网 5.1 介质访问控制协议 5.1.1 ALOHA协议 5.1.2 CSMA协议 5.1.3 CSMA/CD协议 5.2 以太网和IEEE 802.3 5.2.1 物理层标准 5.2.2 MAC协议 5.2.3 性能分析 5.3 令牌环网和IEEE 802.5 5.3.1 MAC协议 5.3.2 管理与维护 5.3.3 性能分析 5.4 网桥 5.4.1 透明网桥 5.4.2 源选径网桥 5.5 小结 习题 第6章 高速局域网 6.1 FDDI网络 6.1.1 与OSI的关系 6.1.2 帧格式 6.1.3 MAC协议 6.1.4 工作原理 6.1.5 拓扑结构 6.1.6 网络容错 6.1.6 技术指标 6.2 快速以太网 6.3 千兆位以太网 6.4 局域网交换机 6.5 小结 习题 第三部分 网络互联 第7章 网络互联与TCP/IP 7.1 网络互联层次 7.1.1 应用级互联 7.1.2 网络级互联 7.2 TCP/IP参考模型 7.3 TCP/IP参考模型的特点 7.3.1 TCP/IP的两大边界 7.3.2 IP层的地位 7.3.3 TCP/IP的可靠性思想 7.3.4 TCP/IP模型的特点 7.4 TCP/IP与ISO/OSI 7.5 小结 习题 第8章 IP 8.1 IP数据报 8.1.1 数据报格式 8.1.2 地址格式 8.2 IPv6 8.2.1 固定头部格式 8.2.2 IPv6地址 8.2.3 扩展头部 8.3 小结 习题 第9章 ARP、RARP和ICMP 9.1 ARP和RARP 9.1.1 ARP 9.1.2 RARP协议 9.1.3 报文格式 9.2 ICMP 9.2.1 ICMP报文类型 9.2.2 ICMP报文格式 9.2.3 ICMP差错报文 9.2.4 ICMP控制报文 9.2.5 ICMP请求/应答报文 9.3 小结 习题 第10章 IP路由协议 10.1 路由器与路由选择 10.1.1 路由器 10.1.2 路由选择 10.2 Internet结构 10.3 基本路由算法 10.3.1 D-V路由算法 10.3.2 L-S路由算法 10.4 IGP:内部网关协议 10.4.1 RIP 10.4.2 IGRP 10.4.3 OSPF协议 10.5 外部网关协议EGP 10.6 Internet组播 10.6.1 组播协议 10.6.2 组的维护 10.6.3 组播范围 10.7 移动IP路由 10.8 无类域间路由 10.9 小结 习题 第11章 传输层协议:TCP和UDP 11.1 传输层基本原理 11.1.1 服务质量 11.1.2 传输层端口 11.2 UDP 11.2.1 UDP报文格式 11.2.2 UDP伪头部 11.2.3 UDP多路复用 11.3 TCP 11.3.1 TCP报文格式 11.3.2 TCP连接端点 11.3.3 TCP可靠传输 11.3.4 TCP流量控制 11.3.5 TCP拥塞控制 11.3.6 TCP连接建立 11.3.7 TCP连接删除 11.3.8 TCP紧急数据传输 11.4 小结 习题 第四部分 网络应用 第12章 客户/服务器模型与套接字编程接口 12.1 网络间进程通信 12.2 客户/服务器模型 12.3 套接字编程接口 12.3.1 套接字基本概念 12.3.2 套接字系统调用 12.3.3 其它系统调用 12.4 基于客户/服务器模型的套接字编程举例 12.4.1 客户/服务器模型流程图 12.4.2 套接字实现机制 12.4.3 Unix环境下的套接字编程举例 12.5 小结 习题 第13章 DNS域名系统 13.1 域名结构 13.1.1 平面型命名机制 13.1.2 层次型命名机制 13.1.3 层次型名字管理 13.1.4 TCP/IP域名 13.2 域名解析 13.2.1 TCP/IP域名服务器 13.2.2 域名解析 13.2.3 逆向域名解析 13.2.4 域名解析的效率 13.3小结 习题 第14章 远程登录Telnet和Rlogin 14.1 为什么要引入远程登录? 14.2 TELNET协议 14.2.1 Telnet工作原理 14.2.2 网络虚终端 14.2.3 Telnet选项 14.3 Rlogin 14.4 小结 习题 第15章 文件传输与访问 15.1 FTP:文件传输协议 15.1.1 FTP特点 15.1.2 FTP工作原理 15.1.3 FTP连接建立 15.1.4 FTP访问控制 15.2 TFTP:简单文件传输协议 15.3 NFS:网络文件系统 15.4 小结 习题 第16章 电子邮件 16.1 电子邮件系统体系结构 16.1.1 ISO/OSI电子邮件系统 16.1.2 TCP/IP电子邮件系统 16.2 TCP/IP电子邮件地址 16.3 TCP/IP电子邮件标准 16.3.1 TCP/IP电子邮件格式 16.3.2 MIME:多用途Internet邮件扩展 16.3.3 SMTP:简单邮件传输协议 16.4 邮箱访问 16.5 小结 习题 第17章 万维网 17.1 Web页面浏览 17.1.1 浏览器和服务器 17.1.2 HTTP 17.1.3 HTML语言 17.2 交互式动态页面 17.2.1 CGI 17.2.2 Java 17.2.3 ASP 17.3小结 习题 第五部分 网络管理与安全 第18章 网络管理 18.1 互连网管理 18.2 SNMP网管体系 18.2.1 管理员/代理模型 18.2.2 MIB:管理信息库 18.2.3 ASN.1 18.2.4 SNMP 18.3 小结 习题 第19章 网络安全 19.1 基本概念 19.2 网络安全攻击 19.3 安全策略 19.4 安全机制 19.4.1 加密 19.4.2 鉴别 19.4.3 数字签名 19.5 防火墙 19.5.1 包过滤 19.5.2 应用级网关 19.6 小结 习题 第20章 网络技术的未来发展 20.1 新型网络应用技术 20.2 宽带网络技术 20.3 无线接入技术 20.4 统一网络技术 20.5 网络安全技术 20.6 主动网络技术 20.7 小结 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值