TCP网络通信

20 篇文章 1 订阅

    TCP的上一层是应用层,TCP向应用层提供可靠的面向对象的数据流传输服务,TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递。它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信。),应用程序通过向TCP层提交数据接发送/收端的地址和端口号而实现应用层的数据通信。

通过IP的源/目的可以惟一地区分网络中两个设备的连接,通过socket的源/目的可以惟一地区分网络中两个应用程序的连接。

三次握手:

    TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后进行数据通信,最后拆除连接三个过程。TCP在建立连接时又分三步走:

第一步(A->B):主机A向主机B发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号;

第二步(B->A):主机B在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示主机B的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。

第三步(A->B):主机A也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成

TCP/IP核心协议

三次握手

 

UDP

UDP即用户数据报协议,是一种面向无连接的不可靠传输协议,不需要通过3次握手来建立一个连接,同时,一个UDP应用可同时作为应用的客户或服务器方。

由于UDP协议并不需要建立一个明确的连接,因此建立UDP应用要比建立TCP应用简单得多。UDP比TCP协议更为高效,也能更好地解决实时性的问题,如今,包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都使用UDP协议。


TCP/IP核心协议

协议选择

协议的选择应该考虑到数据可靠性、应用的实时性和网络的可靠性。

对数据可靠性要求高的应用需选择TCP协议,而对数据的可靠性要求不那么高的应用可选择UDP传送。


TCP协议中的3次握手、重传确认等手段可以保证数据传输的可靠性,但使用TCP协议会有较大的时延,因此不适合对实时性要求较高的应用;而UDP协议则有很好的实时性。

网络状况不是很好的情况下需选用TCP协议(如在广域网等情况),网络状况很好的情况下选择UDP协议可以减少网络负荷

   

Socket是一个网络接口,不同的协议之间的差异性操作,则交给socket自行解决

是一种特殊的IO接口,是一种文件描述符;

是一种常用的进程之间的通信,本地,不同主机之间通信;

Socket可用网络地址结构

{协议,本地地址,本地端口}表示

 

套接字类型:

1.流式套接字SOCK_STREAM

流式的套接字可以提供可靠的、面向连 接的通讯流。它使用了TCP协议。TCP保证了数据传输的正确性和顺序性;

2. 数据报套接字SOCK_DGRAM

数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP。

3. 原始套接字SOCK_RAM

原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议的测试等。

对底层协议进行访问,不方便,对一些协议开发。

           

地址结构:

struct sockaddr_in

    {

       short int sin_family;  /* Internet地址族 */

       unsigned short int sin_port;  /* 端口号 */

       struct in_addr sin_addr;   /* IP地址 */

       unsigned char sin_zero[8];  /* 填0 */

     };

       编程中一般并不直接针对sockaddr数据结构操作,而是使用与sockaddr等价的sockaddr_in数据结构

 

基于TCP/IP的服务器的流程:

1. 创建一个socket,用函数socket()

2. 绑定IP地址、端口等信息到socket上,用函数bind()

3.设置允许的最大连接数,用函数listen()

4.接收客户端上来的连接,用函数accept()

5.收发数据,用函数send()和recv(),或者read()和write()

6.关闭网络连接

 

基于TCP/IP的客户端

1.创建一个socket,用函数socket()

2.设置要连接的对方的IP地址和端口等属性

3.连接服务器,用函数connect()

4.收发数据,用函数send()和recv(),或者

read()和write()

5.关闭网络连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值