TCP/IP协议简介
TCP/IP是最广泛支持的通信协议集合 – 包括大量Internet应用中的标准协议 – 支持跨网络架构、跨操作系统平台的通信
主机与主机之间通信的三个要素
– IP地址(IP address)
– 子网掩码(subnet mask)
– IP路由(IP router) 网络设备 路由器
IP地址
唯一标识,网络中一台主机 由32个二进制数组成
11111111 00000000 11111111 00000000
点分十进制数,最终由4个十进制数标示
192.168.1.1 200.1.1.2
8个二进制1,转成十进制为255
IP地址的分类
•用于一般计算机网络
– A类:1 ~ 127 网+主+主+主
– B类:128 ~ 191 网+网+主+主
– C类:192 ~ 223 网+网+网+主
• 组播及科研专用
– D类:224 ~ 239 组播
– E类:240 ~ 254 科研
IP地址组成
网络位与主机位两部分来组成
子网掩码: 作用:区分IP地址网络位与主机位 利用二进制的1表示网络位 利用二进制的0表示主机位 192.168.10.1=11000000.10101000.00001010.00000001 11111111.11111111.11111111.00000000 255.255.255.0
192.168.10.1 255.255.255.0 = 192.168.10.1/24
192.168.1.1 与 192.168.2.1 判断 跨区域通信 跨网络的通信
配置IP地址方式:
1.手工配置 由管理员手工配置
2.自动获取IP地址 前提:网络中需要有DHCP服务器
测试通信的命令:ping 对方的IP地址
ping 192.168.10.2
一次ping是双向的,有来有回
两台均关闭windows防火墙,默认拒绝ping操作 控制面板---》windows防火墙---》打开或关闭windows防火墙---》关闭
网关地址: 路由器(网关设备)上配置 作用:不同网络之间的通信 一个网络连接到另一个网络的关口
DNS服务地址:将域名解析为IP地址 www.qq.com ------> IP地址
HTTP协议(超文本传输协议)
HTTP 协议简介
http请求由三部分组成,分别是:请求行、消息报头、请求正文
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议版本,格式如下:Method Request-URI HTTP-Version CRLF
http请求方法
– 常用方法 GET,POST,HEAD
– 其他方法 OPTIONS,PUT,DELETE,TRACE和CONNECT
主要特点:
支持客户/服务器模式
简单快速:客户向服务器请求服务时,只需传送请求方法和路径;请求方法常用GET、HEAD、POST等,每种方法规定了客户与服务器联系的不同类型;HTTP协议简单,服务器程序规模小,通信速度较快
灵活:HTTP允许传输任意类型的数据对象;正在传输的数据类型由Content-Type加以标记
无连接:无连接是指每次连接只处理一个请求;服务器处理完客户请求,并收到客户应答后,即断开连接,节省传输时间
无状态:无状态是指协议对于事务处理没有记忆能力;应答较快,但传输数据量较大
HTTP URL:定位网络资源
http://host[:port][abs_path]
HTTP请求
三部分组成:请求行、消息报头、请求正文
格式:Method Request-URI HTTP-Version CRLF
Method:请求方法,GET、POST等
Request-URI:请求的HTTP协议版本
CRLF:回车换行
HTTP响应
由三部分组成:状态行、消息报头、响应正文
状态行格式:HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version:服务器HTTP协议版本
Status-Code:服务器返回的响应状态码
HTTP状态码
由三位数字组成,首数字定义响应类别
1xx:指示信息,表示请求已接收,继续处理;
2xx:成功
3xx:重定向,要完成请求必须进行更进一步的操作;
4xx:客户端错误,请求有语法错误或请求无法实现
5xx:服务器端错误:服务器未能实现合法的请求
常见状态代码
200:OK,请求成功;
400:Bad Request,请求有语法错误,不能被服务器所理解;
401:Unauthorized,请求未经授权;
403:Forbidden,服务器收到请求,但是拒绝提供服务;
404:Not Found,请求资源不存在;
500:Internet Server Error,服务器发生不可预期的错误;
503:Server Unavailable,服务器不能处理客户请求
https:安全的超文本传输协议 默认端口: 443
ftp:文件传输协议 默认端口: 21
tftp:简单文件传输协议 默认端口: 69
DNS:域名解析协议 默认端口: 53
telnet:远程管理协议 默认端口: 23
smtp:邮件协议(发邮件) 默认端口: 25
pop3:邮件协议(收邮件) 默认端口: 110
snmp:简单的网络管理协议 默认端口: 161
应用层常用协议:HTTP、SMTP、FTP、ping、telnet、DNS、DHCP等
三次握手建立过程
1.客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;
2.服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;
3.服务端发送一个SYN=0,ACK=1的数据包给客户端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯.
(1)数据包的关键属性
SYN :标志位,表示请求建立连接
Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据
Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据
四次挥手
概念:所谓四次挥手就是说关闭TCP连接的过程,当断开一个TCP连接时,需要客户端和服务器共发送四个包确认
第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传输,客户端进入FIN_WAIT_1状态
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序 号),服务器进入CLOSE_WAIT状态
第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态
第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个AKC给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手
上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况
深入讨论:
1、为什么连接需要三次,关闭的时候需要四次?
当服务器收到客户端的连接请求后,可以直接发送SYN+ACK报文,其中ACK是确认应答,SYN报文是用来同步的。但 是在关闭连接的时候,当服务器收到FIN的时候,很可能并不会立刻关闭SOCKET,所以只能先回个ACK来应答,只有等服务器把所有报文都发完了才能发送FIN,因此不能一起发送,所有需要四步。
2、为什么断开链接的时候客户端设置的定时器时间等待要2MSL(两个通信报文的最大时间)?
当客户端最终告诉服务器断开确认的时候,他不知道自己的发出的指令是否准确的一次性被服务器接收。
3、为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。