服务器知识科普
来源:互联网 发布:蒋方舟 知乎 徐静蕾 编辑:程序博客网 时间:2024/06/11 02:38
一、长连接与短连接
TCP连接简介
连接的建立是三次握手,释放是4次握手
经典的三次握手示意图:
经典的四次握手关闭图:
短连接: 指通信双方有数据交互时,就建立一个TCP连接,没有数据交互了则断开此TCP连接;
短连接步骤:
连接→数据传输→关闭连接;
长连接步骤:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;
长连接需要加长度报文头,报文头里有数据总长度
长连接长期没有数据交互浪费带宽
短连接数据交互不频繁容易socket错误
二、同步和异步
1、异步
接受和发送在两个不同的线程,进程或者程序中
2、同步
发送后等待接收
所以一定要有超时机制
三. 单工、半双工和全双工
1、单工
单工就是指A只能发信号,而B只能接收信号,通信是单向的,就象灯塔之于航船——灯塔发出光信号而航船只能接收信号以确保自己行驶在正确的航线上。
2、半双工
半双工就是指A能发信号给B,B也能发信号给A,但这两个过程不能同时进行。最典型的例子就象我们在影视作品中看到的对讲机一样
3、全双工
半双工就是指A能发信号给B,B也能发信号给A,但这两个过程不能同时进行。最典型的例子就象我们在影视作品中看到的对讲机一样
3、全双工
是指网卡在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音
阻塞就是干不完不准回来,
非阻塞就是你先干,我现看看有其他事没有,完了告诉我一声
四. 阻塞和非阻塞
非阻塞就是你先干,我现看看有其他事没有,完了告诉我一声
四. 阻塞和非阻塞
阻塞就是干不完不准回来,非阻塞就是你先干,我现看看有其他事没有,完了告诉我一声
我们拿最常用的send和recv两个函数来说吧...
比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如果TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的数据的话...这时候就体现出阻塞和非阻塞的不同之处了:对于阻塞模式的socket send函数将不返回直到系统缓冲区有足够的空间把你要发送的数据Copy过去以后才返回,而对于非阻塞的socket来说send会立即返回WSAEWOULDDBLOCK告诉调用者说:"发送操作被阻塞了!!!你想办法处理吧..."
对于recv函数,同样道理,该函数的内部工作机制其实是在等待TCP/IP协议栈的接收缓冲区通知它说:嗨,你的数据来了.对于阻塞模式的socket来说如果TCP/IP协议栈的接收缓冲区没有通知一个结果给它它就一直不返回:耗费着系统资源....对于非阻塞模式的socket该函数会马上返回,然后告诉你:WSAEWOULDDBLOCK---"现在没有数据,回头在来看看"
比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如果TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的数据的话...这时候就体现出阻塞和非阻塞的不同之处了:对于阻塞模式的socket send函数将不返回直到系统缓冲区有足够的空间把你要发送的数据Copy过去以后才返回,而对于非阻塞的socket来说send会立即返回WSAEWOULDDBLOCK告诉调用者说:"发送操作被阻塞了!!!你想办法处理吧..."
对于recv函数,同样道理,该函数的内部工作机制其实是在等待TCP/IP协议栈的接收缓冲区通知它说:嗨,你的数据来了.对于阻塞模式的socket来说如果TCP/IP协议栈的接收缓冲区没有通知一个结果给它它就一直不返回:耗费着系统资源....对于非阻塞模式的socket该函数会马上返回,然后告诉你:WSAEWOULDDBLOCK---"现在没有数据,回头在来看看"
0 0
- 服务器知识科普
- CDN知识科普
- 胎动知识科普
- JavaScript科普小知识
- 服务器入门科普
- [科普]数据存储知识扫盲
- 医疗器械安全知识小科普
- 科普 | “开放知识”的定义
- 科普小知识——音频编码
- Web前端开发必备--浏览器知识科普
- 计算机及其配件和参数知识科普
- 科普 | 知识图谱相关的名词解释
- 科普小知识:VR游戏的音效
- 服务器系统日志报错科普
- 服务器知识
- 服务器知识
- 萌新各种安全知识科普,API,OD,脱壳,加壳,基础科普
- 知识小科普!像素英寸与DPI的那些事儿
- Java内存Dump文件查看和分析工具介绍
- 程序开过多线程,导致hadoop作业无法运行成功——Call to hadoop1:9000 failed on lo cal exception: java.io.IOException: Coul
- Android 微信支付
- 面试题
- 移动信息化成迈入互联网化的最近入口
- 服务器知识科普
- 10年IT工作经验,寻找自己的市场竞争力的过程
- Device Tree的用法
- HTTP协议学习
- UML建模中的时序图详解
- (视频) 《快速创建网站》 3.3 国际化高大上 - WordPress多语言支持
- Java基础面试题与答案
- 12306 ,真不是您想的那么easy—1
- linux网络编程 select,poll,epoll模型