前言:阅读《Web性能权威指南》摘录笔记。在这本书开篇就读到第一句话令人印象深刻: "合格的开发者知道怎么做,而优秀的开发者知道为什么那么做"。
内容大纲:
1、因特网有两个核心的协议:IP和TCP。
2、三次握手
正文:
1、因特网有两个核心的协议:IP和TCP。
IP,即Internet Protoco(因特网协议),负责联网主机之间的路由选择和寻址
TCP,即Transmission Control Protocol(传输控制协议),负责在不可靠的传输信道之上提供可靠的抽象层。
TCP/IP也常被称为"因特网协议套件"(Internet Protocol Suite)
2、三次握手
所有的TCP连接一开始都要经过三次握手。客户端和服务器在交换应用数据之前,必须就起始分组序列号,以及其他一些连接相关的细节达成一致。处于安全考虑,序列号由两端随机生成。
SYN
客户端选择一个随机序列号x,并发送一个SYN分组,其中可能还包括其他TCP标志和选项。
SYN ACK
服务器给x加1,并选择自己的一个随机序列号y,追加自己的标志和选项,然后返回响应。
ACK
客户端给x和y加1并发送握手期间的最后一个ACK分组。
关于《理解TCP为什么需要进行三次握手(白话)》这篇博客可以给你带来对TCP的更深入的理解。
其中要记下来的是:
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,
为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。
或者可以记忆下中的描述:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器端收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k)即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器端进入ESTABLISHED状态,完成三次握手。
(recv -- > receive 接收) (established:英 ɪ'stæblɪʃt 确定的;已制定的,已建立的)