文章目录
-
- 1. 常用的网络传输协议
- 2. ICMP协议与IGMP协议
- 3. ARP协议与RARP协议
- 4. TCP与UDP的区别
- 5. 常见的状态码
- 6. 三次握手
- 7. 四次挥手
- 8. 为什么连接的时候是三次握手,关闭的时候却是四次握手
- 9. 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态
- 10. 如果已经建立了连接,但是客户端突然出现故障了怎么办
- 11. session和cookie的区别
- 12. 对称加密和非对称加密
- 13. HTTP和HTTPS的区别
- 14. HTTP协议是无状态协议,怎么解决
- 15. 常用HTTP方法有哪些
- 16. HTTP请求报文和响应报文
- 17. HTTP协议常见的首部
- 18. http的头部,keep-alive的作用
- 19. 一次完整的HTTP请求的过程
- 20. HTTP1.0与HTTP1.1的区别
- 21. HTTP2.0与HTTP1.x的区别
- 22. 一次完整的HTTPS请求的过程
- 23. TCP拥塞控制
- 25. urllib和urllib2
- 27. POST和GET的区别
- 28. python中实现IO多路复用
- 30. python常用的并发网络库
- 31. 什么是前后端分离,优缺点各是什么
- 32. nginx与apache的区别
- 33. CGI和WSGI
- 34. RPC
- 35. SOAP
- 36. RESTful架构
- 37. 幂等
1. 常用的网络传输协议
- TCP:传输控制协议,可靠传输,面向连接
- UDP:用户数据包协议,不可靠传输,面向无连接
- FTP:文件传输协议,用于上传和下载文件
- HTTP:超文本传输协议,基于TCP/IP通信协议,面向对象
- SMTP:邮件传输协议
- TELNET:Internet远程登录服务的标准协议和主要方式
- DNS:域名系统,将域名解析为ip地址
2. ICMP协议与IGMP协议
ICMP(Internet Control Message Protocol)Internet控制报文协议,是一种面向无连接的网络层协议,是TCP/IP协议族的一个子协议,用于主机、路由器之间传递控制消息。ICMP协议的主要功能是确认IP包是否成功到达目标地址,通知在发送过程中IP包被丢弃的原因。
IGMP(Internet Group Management Protocol)Internet组管理协议,是TCP/IP协议族中负责IPV4组播成员管理的协议。IGMP协议用来接收主机与其直接相邻的组播路由器之间建立和维护组播成员关系,通过在接受主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中,IGMP共有v1、v2、v3三个版本。
3. ARP协议与RARP协议
ARP(Address Resolution Protocal)地址解析协议,其基本功能为透过目标设备的IP地址,查询目标的MAC地址,以保证通信顺利进行。它是IPv4网络层必不可少的协议,不过在IPv6已经不再适用,并被邻居发现协议(NDP)所替代。
RARP(Reverse Address Resolution Protocol)反向地址转换协议允许局域网的物理机器从网关服务器的ARP表或缓存上请求IP地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的IP地址,当设置一台新的机器时,其RARP客户机程序需要想路由器上的RARP服务器请求响应的IP地址。
4. TCP与UDP的区别
- TCP提供面向连接的传输,通信前要先建立连接(三次握手机制);UDP提供无连接的传输,通信前不需要建立连接。
- TCP提供可靠的传输(有序、无差错、不丢失、不重复);UDP提供不可靠的传输。
- TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组;UDP是面向数据报文的传输,没有分组开销。
- TCP首部开销20字节;UDP的首部开销小,只有8字节。
- TCP的逻辑通信信道是全双工的可靠信道;UDP是不可靠信道。
- TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制和流量控制。
应用场景:
- 对数据可靠性的要求高的应用需要选择TCP协议,如验证密码;而对数据可靠性要求不那么高的可以选择UDP协议。
- 对应用实时性要求高的因公可以选择UDP协议,如视频监控等。
- 在网络状况不好的情况下需选用TCP协议,如广域网;而网络状况很好的情况下就不需要采用TCP协议,建议选择UDP协议来减少网络负荷,如局域网。
5. 常见的状态码
状态码 | 状态 | 描述 |
---|---|---|
200 | Ok | 请求成功 |
204 | No Content | 请求被受理但没有资源可以返回 |
206 | Partial Content | 客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法 |
301 | Moved Permanently | 永久性重定向 |
302 | Found | 临时重定向 |
303 | See Other | 与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上 |
304 | Not Modified | 发送附带条件的请求时,条件不满足时返回,与重定向无关 |
307 | Temporary Redirect | 临时重定向,与302类似,只是强制要求使用POST方法 |
400 | Bad Request | 请求语法错误,不能被服务器解析 |
401 | Unauthorized | 未经授权,需与www-Authenticate一起用 |
403 | Forbidden | 服务器收到请求,但拒绝提供服务 |
404 | Not Found | 请求资源不存在 |
500 | Internal Server Error | 服务器发生不可预期的错误 |
503 | Server Unavailable | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
总之,HTTP状态码分为5个类别:
- 1xx:指示信息–表示请求已接收,继续处理
- 2xx:成功–表示请求已被成功接收、理解、接受
- 3xx:重定向–要完成请求必须进行更进一步的操作
- 4xx:客户端错误–请求有语法错误或请求无法实现
- 5xx:服务器端错误–服务器未能实现合法的请求
6. 三次握手
- 第一次握手:建立连接时,客户端发送SYN包(SYN=1,seq=x)到服务器,并进入同步已发送状态(SYN_SENT),等待服务器确认。状态过程:
SYN=1, seq=x
。 - 第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包(SYN=1,ACK=1),服务器进入同步收到状态(SYN_RECV)。状态过程:
SYN=1, ACK=1, seq=y, ack=x+1
。 - 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认ACK包(ack=y+1),此包发送完毕,客户端和服务器进入已建立连接状态(ESTAB_LISHED),完成握手。状态过程:
ACK=1, seq=x+1, ack=y+1
。
7. 四次挥手
- 第一次挥手:客户端进程发出连接释放报文,并停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(实际上等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入终止等待1状态(FIN_WAIT_1)。TCP规定,FIN报文段即使不携带数据也要消耗洗个序号。状态过程:
FIN=1, seq=u
。 - 第二次挥手:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自