网络中的 TCP/IP
TCP/IP
OSI的“实现”:TCP/IP
OSI七层模型 |
TCP/IP概念层模型 |
功能 |
TCP/IP协议族 |
应用层 |
应用层 |
文件传输、电子邮件、文件服务、虚拟终端 |
FTP,HTTP,SMTP,SNMP,Telnet |
表示层 |
数据格式化、代码转换、数据加密 |
无 |
|
会话层 |
解除或建立与别的接点的连接 |
无 |
|
传输层 |
传输层 |
提供端对端的接口 |
TCP,UDP |
网络层 |
网络层 |
为数据包选择路由 |
IP,ICMP,RIP,OSPF,IGMP |
数据链路层 |
链路层 |
传输哟偶地址的帧以及错误检测功能 |
SLIP,CSLIP,PPP,ARP,RARP |
物理层 |
以二进制数据形式在物理媒体上传输数据 |
ISO2110,IEEE802,IEEE802.2 |
常用的TCP端口号有:HTTP 80,FTP 20/21,Telnet 23,SMTP 25,DNS 53等;常用的保留UDP端口号有:DNS 53,BootP 67(server)/ 68(client),TFTP 69,SNMP 161等。
TCP的三次握手
TCP Flags
URG:紧急指针标志
ACK:确认序号标志
PSH:push标志
RST:重置连接标志
SYN:同步序号,用于建立连接过程
FIN:finish标志,用于释放连接(1:发送方已无数据发送)
“握手”是为了建立连接,TCP三次握手的流程图如下:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用3次握手建立一个连接。(sequence number 即上图中x ,y值)
1、第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。
2、第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
3、第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTAB_LISHED状态,完成三次握手。
谈谈TCP的四次挥手
挥手是为了终止连接,TCP四次挥手的流程图如下:
TCP采用四次挥手来释放连接
1、第一次挥手:client 发送一个FIN,用来关闭client到server的数据传送,client进入FIN_WAIT_1状态。
2、第二次挥手:server收到FIN后,发送一个ACK给client,确认序号为收到的序号加1(与SYN相同,一个FIN占用一个序号),server进入CLOSE_WAIT状态。
3、第三次挥手:server发送一个FIN,用来关闭server到client的数据传送,server进入LAST_ACK状态。
4、第四次挥手:client收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给server,确认序号为收到的序号+1,server进入CLOSED状态,完成四次挥手。(client在2MSL时间之后也会关闭)
TCP连接必须经过2MSL后才真正的释放?
确认有足够的时间让对方收到ACK包
避免新旧连接混淆
UDP简介
UDP特点
1、面向非连接
2、不维护连接状态,支持同时向多个客户端传输相同的消息
3、数据包报头只有8个字节,额外开销较小
4、吞吐量只受限于数据生成速率、传输速率以及机器性能
5、尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
6、面向报文,不对应用程序提交的报文信息进行拆分或者合并
结论
TCP UDP
1、面向连接 vs 无连接
2、可靠性 vs 无
3、有序性 vs 无
4、速速慢 vs 快(适用于在线媒体 广播等)
5、量级(20个字节) vs 8个字节
TCP的滑动窗口
RTT和RTO
RTT:发送一个数据包到收到对应的ACK,所花费的时间
RTO:重传时间间隔(客户端发送一个ack时默认启动一个定时器,服务器在一定的时间没有返回相应的包时启动定时器从新发送一个)(经过RTT计算出RTO)
HTTP简介
超文本传输协议HTTP主要的特点
1、支持客户/服务器模式
2、简单快速
3、灵活(传输任意类型数据)
4、无连接(每次连接限制一个请求,服务器处理完客户请求并收到客户应答之后即断开,节省传输时间。http1.1默认使用长连接服务器默认等待一定时间后才断开连接,以保证连接特性)
5、无状态(协议对事物的处理没有状态)
请求/响应的步骤
1、客户端连接到Web服务器
2、发送HTTP请求
3、服务器接收到请求并返回HTTP响应
4、释放连接TCP连接
5、客户端浏览器解析HTML内容
在浏览器输入URL按下回车经历的流程
1、DNS解析
2、TCP连接(找到IP地址和端口后和服务器建立TCP连接)
3、发送HTTP请求
4、服务器处理请求并返回HTTP报文
5、浏览器解析渲染页面
6、连接结束
HTTP状态码
五种可能的取值
1、1××:只是信息—表示请求已接收,继续处理
2、2××:成功—表示请求已被成功接收、理解、接受
3、3××:重定向—要完成请求必须进行更进一步的操作
4、4××:客户端错误—请求语法错误或请求无法实现
5、5××:服务器端错误—服务器未能实现合法的请求
常见的状态码
1、200:正常返回信息 – 成功
2、400(bad request):客户端请求语法错误,不能被服务器所理解
3、401(unauthorized):请求未经授权,这个状态代码必须和www-authorized报头域一起使用
4、403(forbidden):服务器收到请求但是拒绝提供服务
5、404(not found):请求资源不存在
6、500(internal server error):服务器发生不可预期的错误
7、503(server unavailable):服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
POST请求和GET请求
三个层面来解答
1、HTTP报文层面:GET将请求信息放在URL,POST放在报文体中
2、数据库层面:GET符合幂等性(对数据库的一次操作和多次操作是一致的)和安全性,POST不符合
3、其他层面:GET可以被缓存、被存储,POST不行
Cookie和Session的区别
Cookie的简介
1、是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端
2、客户端再次请求的时候,会把cookie回发
3、服务器收到后,会解析cookie生成与客户端相对应的内容
Cookie的设置以及发送过程
Session的简介
1、服务器的机制,在服务器上保存的信息
2、解析客户请求并操作session id ,按需保存状态信息
Session的实现方式
使用cookie来实现
Cookie和Session的区别
1、cookie数据存放在客户的浏览器上,session数据存放在服务器上
2、session相对于cookie更安全
3、考虑到减轻服务器的负担,应当使用cookie
HTTP和HTTPS的区别
1、HTTPS需要到CA申请证书,HTTP不需要
2、HTTPS密文传输,HTTP明文传输
3、连接方式不同,HTTPS使用443端口,HTTP使用80端口
4、HTTPS = HTTP + 加密 + 认证 + 完整性保护,较HTTP安全
Socket简介
常用的TCP端口号有:HTTP 80,FTP 20/21,Telnet 23,SMTP 25,DNS 53等;常用的保留UDP端口号有:DNS 53,BootP 67(server)/ 68(client),TFTP 69,SNMP 161等。