友情提示:本人即将毕业面试,看学习资料做的笔记,方便自己记忆,有不懂的小伙伴可以一起交流,大神就可以不用了,哈哈。
TCP
TCP:面向连接、可靠的传输协议
谈到tcp就必须知道面向连接和可靠传输协议,什么是面向连接?就要说到3次握手下面这张图就是tcp的3次握手图:
**当客户端想要连接服务端时,会由客户端的传输控制层发送一个(sync)包,然后服务端收到后会返回一个(sync+ack(表示知道))包,最后客户端会在发送一个(ack)确定包,只有双方都确定自己的输入输出都是通的后,两端才有资源的开辟(也就是代表为对方服务),开辟后才是真正建立连接。这也就是为什么握手需要3次。
什么是面向连接呢?
如果有一方把服务资源丢掉了那这个连接也就断了,只有双方的资源都开辟着,这个连接才是存在的,面向连接不是物理的,是开辟的资源的对称。资源的开辟代表为对方服务,完成自己后续的输出和如果对象有数据发来我有资源接你后续的一个包**
什么叫做可靠的传输?
比如客户端发送的数据包到底到没到服务端必须要等服务端发一个(ack)确认过来,这个确认机制是他可靠传输的支撑。
总结:3次握手带来了面向连接,确认机制保证了可靠传输
补充:udp就没有确认的机制,直接发
socket
传输控制层里还有一个重要的东西就是socket,什么是socket呢?
(在计算机中socket是可读可写的,channel是jdk抽象出来的,客户端跟服务端建立连接后就会得到一个socket)
中文解释:套接字
怎么记忆呢:这个成对出现的(ip+port),socket其实会在操作系统中映射到fd中的一个文件描述符就是一个数字,这个数字会交给一个进程绑定起来,进程就可以对这个数字读写。
一个电脑在浏览器同时打开几个百度的页面为什么通信数据不会乱,因为socket是成对的每一个里面有一个判断的维度。
4次分手
传输数据后就要4次分手,具体图见如下图所示:
客户端先发送一个fin的数据包表示想断开,服务端回送一个基于fin的ack包表示已经知道了,然后查看是否与客户端还有事情可做,如果没有,就发送一个fin包表示断开连接,然后客户端在发送一个确认包。
这张图就是一个从3次分手到传输数据再到4次分手的展示
总结:七层是层层调用的,传输控制层后面的网络层就需要计算机网络的知识结合理解。