TCP、UDP 和Socket编程
来源:互联网 发布:车载刮胡刀淘宝网 编辑:程序博客网 时间:2024/06/04 19:23
TCP协议:
1. TCP协议:Transmission Control Protocol,属于传输层的一种协定。它是一种完整的协定,会经过“建立连接”,“资料传输” ,”关闭连线”3个阶段。
2. 特点:TCP以正确性为主要诉求,具备如下五个特性:
(1)连线导向的传输协议(Connection Oriented):在封包传送之前,必须先经过与对方建立連线之动作,当建立連线成功后,才能开始传送资料给对方,等资料传送完毕后,再关闭连线的一种传输方式。
(2)同步传输(Synchronous Transmission)):是指『传送端』在传送出封包后,会等待『接受端』的『确认』(Acknowledge)响应,再传送下一个封包,而不是直接将封包不断地传送出去。
(3)可靠的(Reliable)传输协定:,也是属于双向资料传输协议,会等待对方确认是否已正确收到.所以TCP封包在网路的转送的过程,不会因为某些因素而造成封包遗失而不知,纵使封包遗失未到达目的地,或是封包被毁损,來源端都会重新传送一次该封包。
(4)较无效率的(Inefficient)传输协议:由于在传输过程中多出了很多封包传输前的連线动作,与传输中多了等待对方的『确认』(Acknowledge)响应,因此在传输的整体过程中会较没有效率,但却能保证将TCP封包正确无误地传达对方。
(5)流量控制(Flow Control):TCP具有流量控制功能,协调彼此双方都能接受的传送速度,避免掉因为大量封包涌入,造成主机无法处理的情形下丢弃(discard)封包,又要求來源端主机重新传送一次的情形。
3.三次握手:
4.四次挥手:
图解说明:
1.应用进程A调用close关闭连接,TCP发送一个FIN ;
2.应用进程B接收到FIN 之后,执行关闭,确认FIN;
3.一段时间之后,接收到结束信号的B调用close关闭它的socket,发送一个FIN ;
4.A确认FIN
UDP协议:
概念:UDP是未经过与对方的連线,便直接将资料传送出去,传送过程也不经过与对方确认是否收到。是一种不可靠传输,如常见的屏幕广播。它是以效率为主要诉求。
Socket:
1.socket是对TCP/UDP协议的封装,Socket本身并不是协议,而是一个调用接口,通过Socket,我们才能使用TCP/UDP协议。
2.UDP和TCP都是通过『IP地址』与『TCP Port』形成一个『Socket』,透过此Socket与对方的Socket形成一个『Socket Pair』进行通讯。
3. 通常我们在说到网络编程时默认是指TCP编程,即用socket函数创建一个socket用于TCP通讯.
4.UDP和TCP编程区别:
摘自:(http://blog.chinaunix.net/uid-26421509-id-3814684.html)
TCP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt(); * 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、接收客户端上来的连接,用函数accept();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
8、关闭监听;
TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
与之对应的UDP编程步骤要简单许多,分别如下:
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;
UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;
- TCP、UDP 和Socket编程
- 基于socket的TCP和UDP编程
- 基于socket的TCP和UDP编程
- 基于socket的TCP和UDP编程
- 基于Socket的TCP和UDP编程
- 基于Socket的UDP和TCP编程
- 基于socket的UDP和TCP编程
- 基于socket的TCP和UDP编程
- socket编程原理,TCP和UDP
- 利用socket进行TCP和UDP编程
- linux socket编程 TCP和UDP实例
- Python socket编程,tcp和udp
- TCP、UDP、SOCKET编程
- Socket编程UDP/TCP
- Socket编程--TCP/UDP
- Socket编程TCP/UDP
- TCP和UDP Socket
- socket与TCP/UDP编程~
- 算数-数列
- iOS 屏幕适配
- map与unordered_map的区别与选择
- CentOS 6.5 LVM磁盘管理学习笔记
- LintCode-剑指Offer-空格替换
- TCP、UDP 和Socket编程
- 解压版的Tomcat基本配置和安装
- NOIP2015 提高组 day1 信息传递
- 带宽(Bandwidth,UVa 140)
- 苹果开发 笔记(94) UIScrollView 和 Masonry
- LintCode-剑指Offer-(365)二进制中有多少个1
- checkstyle安装
- OpenStack 中混合 Hypervisor 场景的原理分析与最佳实践
- 好久没更博了