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、关闭网络连接;

0 0
原创粉丝点击