应用层
(DNS、HTTP、FTP、HTML、URI、SMTP、TELNET、SSH、SSL/TLS...)
传输层:数据分段,通过端口号区分不同的服务
(TCP、UDP、SCTP...)
网络层:通过ip地址进行逻辑寻址
(ARP、IPV4、IPV6、ICMP、IPSEC)
数据链路层:mac 媒介访问控制层
LLC 逻辑链路层 为上层提供fcs校验
物理层:定义电器电压接口规范光学特性
(以太网、ppp...)
TCP:面向连接的可靠传输协议
UDP:非面向连接的不可靠传输协议
端口号:
0——65535
1——1023(著名端口号)
1024——65535(动态端口,高端口)
几种常见的应用层服务及端口号
FTP 文件传输协议 TCP21
Telnet 远程登陆 TCP23
HTTP 超文本传输协议 TCP80 8080
DNS 域名解析系统 UDP/TCP 53
HTTPS 安全HTTP TCP 443
1、端口号:用来标识同一台计算机的不同的应用进程。
1)源端口:源端口和IP地址的作用是标识报文的返回地址。
2)目的端口:端口指明接收方计算机上的应用程序接口。
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
2、序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。
3、数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。
4、保留:为将来定义新的用途保留,现在一般置0。
5、控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。
1)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
6、窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。
7、校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。
8、紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
9、选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。
10、数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段
三次握手:
第一次握手
客户主动(active open)去connect服务器,并且发送SYN 假设序列号为J,服务器是被动打开(passive open)
第二次握手
服务器在收到SYN后,它会发送一个SYN以及一个ACK(应答)给客户,ACK的序列号是 J+1表示是给SYN J的应答,新发送的SYN K 序列号是K
第三次握手
客户在收到新SYN K, ACK J+1 后,也回应ACK K+1 以表示收到了,然后两边就可以开始数据发送数据了
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
四次断开:
当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为1, 服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可接收信息)。 A收到B的确认后进入等待状态,等待B请求释放连接, B数据发送完成后就向A请求连接释放,也是用FIN=1 表示, 并且用 ack = u+1(如图), A收到后回复一个确认信息,并进入 TIME_WAIT 状态, 等待 2MSL 时间。
即:A:我不发了
B:知道了
B:那我关了,断吧
A:ok
追问:为什么需要三次
TCP是可靠的传输控制协议三次握手能保证数据可靠传输又能提高传输效率。。
如果TCP的握手是两次: .
<1>如果client发给server的SYN报文因为网络原因。延迟发送。由于client
没有收到server对SYN的确认报文,会重发SYN报文,服务器会回复ACK,
连接建立。数据发送完毕,这条连接被正常关闭。这时,延迟的SYN报文发到
了server server 误以为这是client重新发送的同步报文,又回复了一个ACK,
和client建立了连接。。
<2>如果server给client发送的ACK报文因为网络原因,报文被丢弃,此时
server认为已经建立好连接,但是client没有收到确认报文,认为没有建立好
连接。client 会重发SYN报文。此时server已经处于就绪状态,认为已经建立
好连接。。
如果TCP的握手是四次:.
1.client给server发送SYN同步报文:。
2.server收到SYN后,给client回复ACK确认报文;。
3.server给client发送SYN同步报文;。
4.Client给server发送ACK确认报文。。
接入方式
第2.3步之间,server和client没有任何的数据交互,分开发送相当于多发了
-次TCP报文段,SYN和ACK标识只是TCP报头的一个标识位。很明显,这
两步可以合并,从而提高连接的速度和效率。.