`
coach
  • 浏览: 382412 次
  • 性别: Icon_minigender_2
  • 来自: 印度
社区版块
存档分类
最新评论

http,socket,tcp/ip 网络传输与通讯知识总结

    博客分类:
  • http
阅读更多
什么是TCP和UDP,以及二者区别是什么?
TCP的全称为传输控制协议。这种协议可以提供面向连接的、可靠的、点到点的通信。
UDP全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信。
使用TCP还是UDP,那要看你的程序注重哪一个方面,可靠(tcp)还是快速(udp)。


TCP/IP 建立连接的过程

  手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。
   TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。

建立起一个TCP连接需要经过“三次握手”:


第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。


所谓的三次握手就是要有三次连接信息的发送/接收过程。TCP连接的建立需要进行三次连接信息的发送/接收。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开).


HTTP连接

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。


SOCKET原理

在iphone的平台下,要进行socket开发有开源的库Asyncsocket,官方的CFSocket,还有BSD的socket。

套接字(SOCKET)概念

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。


建立SOCKET连接

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

SOCKET连接与TCP/IP连接

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。


SOCKET连接与HTTP连接

由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。

而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。

若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;

若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端。

因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

HTTP协议是应用层的协义

一个是发动机(Socket),提供了网络通信的能力
一个是轿车(Http),提供了具体的方式

两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式展现,是以不同的应用层协议来定义的,如:HTTP,FTP,...

SOCKET是对端口通信开发的工具,它要更底层一些 。

SOCKET与HTTP的区别与联系

1.简单的说HTTP一般为单向的,如你像服务器发起一个请求,服务器就会返给你需要的,而socket使双向的,即一方(如客户端)有改变就会通知另一方 (如服务器)要求保持一致,当这一方(服务器)发生改变会通知另一方(客户端)要保持数据一致。   一般情况下程序要保持实时性(如及时通讯,股票软件等)的话用socket比较好,   要是普通对实时行要求不高的,就用http就够了,取之有点用于你的程序,根据你的情况而定。

2.“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到 应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP  文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

   而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API), 通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也 能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道 的一些最基本的函数接口,比如create、  listen、connect、accept、send、read和write等等。网络有一段关于socket和TCP/IP协议关系的说法比较容易理 解:

  “TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”

  CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

  实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。






  • 大小: 33.1 KB
  • 大小: 62.4 KB
分享到:
评论

相关推荐

    TCP/IP协议与网络编程技术

    打开国内外各大知名网站的招聘页面,都可以看到类似于“熟悉TCP/IP协议、掌握socket通讯开发”等字样的要求。本书就是为了满足读者在这方面知识的需求而编写的一本TCP/IP协议与基于TCP/IP编程方面的书籍。 本书有...

    计算机网络课件及知识点总结

    第1章 引言 第2章 数据通信基础 第2章 数据通信基础 第3章 物理层接口 第4章 广域网 第5章 局域网 第5章 局域网 第6章 高速局域网 第7章 网络互联与TCP/IP ...第18章-第19章网络管理与网络安全 复习答疑 复习答疑 考试

    TCP-IP详解卷2:实现.part1

    读者阅读本书时,应当具备卷1中阐述的关于TCP/IP的基本知识。本书适用于希望理解TCP/TP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。 目 录 译者序 前言 第1章 概述 ...

    TCP-IP详解卷2:实现.part2

    读者阅读本书时,应当具备卷1中阐述的关于TCP/IP的基本知识。本书适用于希望理解TCP/TP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。 目 录 译者序 前言 第1章 概述 ...

    本资源分为两个压缩包,请注意:TCP-IP详解卷2:实现(2)

    读者阅读本书时,应当具备卷1中阐述的关于TCP/IP的基本知识。本书适用于希望理解TCP/TP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。 目 录 译者序 前言 第1章 ...

    Linux网络编程.pdf socket tcp udp

    1.1 网络的历史................................................................. ...................................... 1 1.2 OSI 模型....................................................................

    TCPIP协议详解卷2:实现

    这些内容对于编写TCP/IP网络应用程序的程序员和负责维护基于TCP/IP协议的计算机网络的系统管理员来说,应当是必读的。 参加本书翻译的有:谢钧(序言和第1章~第7章),蒋慧(第8章~第14章,第22章~第23章),吴礼发(第15...

    网络信息扫描实验

    端口是TCP协议中所定义的,TCP协议通过套接字(socket)建立起两台计算机之间的网络连接。套接字采用[IP地址:端口号]的形式来定义,通过套接字中不同的端口号可以区别同一台计算机上开启的不同TCP和UDP连接进程。对于...

    CCNA考试指南 内容很丰富

    TCP/IP协议套件的综合概括;管理广域网,配置ISDN、帧中继和ATM;学习IP配置;Novell IPX协议栈、IPX封装类型和SAP及RIP的配置;使用访问表进行基本的通信量管理;默认的局域网连网,跨域配置VLAN。 在每一章中,均...

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

    第一篇 基础知识篇  第一章 文件系统和进程系统  1.1 文件系统  1.1.1 文件系统的总体结构  1.1.2 文件结构和目录结构  1.2 文件系统的相关编程  1.3 进程系统  1.3.1 进程的概念  1.3.2...

    MakeTcpHole

    接着NAT会为这个传输创建一个Session(Session是一个抽象的概念,如果是TCP,也许Session是由一个SYN包开始,以一个FIN包结束。而UDP呢,以这个IP的这个端口的第一个UDP开始,结束呢,呵呵,也许是几分钟,也许是几...

    嵌入式Linux C编程入门(第2版) PPT

    第1章 嵌入式系统基础知识 .1 1.1 嵌入式系统概述 1 1.1.1 嵌入式系统的发展史 2 1.1.2 嵌入式系统的定义与特点 3 1.1.3 嵌入式系统的特点 4 1.2 嵌入式系统的组成 5 1.2.1 嵌入式系统的硬件架构...

    CCNA学习指南.rar

    TCP/IP协议套件的综合概括;管理广域网,配置ISDN、帧中继和ATM;学习IP配置;Novell IPX协议栈、IPX封装类型和SAP及RIP的配置;使用访问表进行基本的通信量管理;默认的局域网连网,跨域配置VLAN。 在每一章中,均...

    CCNA学习指南

    TCP/IP协议套件的综合概括;管理广域网,配置ISDN、帧中继和ATM;学习IP配置;Novell IPX协议栈、IPX封装类型和SAP及RIP的配置;使用访问表进行基本的通信量管理;默认的局域网连网,跨域配置VLAN。 在每一章中,均...

    leetcode有效期-Go-Interviews:Golang面试知识点总结,不定期更新

    面试知识点总结 主要集中于 golang 的面试,建议准备三份源码分析以便面试,顺带刷一刷 leetcode 会有奇效哦,不定期更新 本人能力有限,欢迎各位指正             每天一道面试题 常见问题 1. 浏览器的一个...

    Linux网络编程

    6.4.3 一个套接字是怎样在网络上传输数据的?......... 143 6.5 套接字的一些基本知识... 144 6.5.1 基本结构............ 144 6.5.2 基本转换函数..... 145 6.6 基本套接字调用........... 147 6.6.1 socket() 函数...

    《Delphi 深度编程及其项目应用开发》PDF书及代码

    7.2.1 多层应用系统的结构 7.2.2 存取数据的运作原理 7.2.3 更新数据的运作原理 7.3 容错处理和负载平衡 7.4 Active Form 第8章 Socket编程 8.1 WinSock基础 8.1.1 TCP、UDP和IP协议 8.1.2 套接字(Socket) 8.1.3 ...

    linux 网络编程源代码

    1.1 网络的历史.......................................................................................................1 1.2 OSI 模型........................................................................

    python入门到高级全栈工程师培训 第3期 附课件代码

    01 ip地址与子网划分 02 ip地址配置 03 虚拟机网络模式 04 三层隔离验证试验 第8章 01 上节课复习 02 软件包介绍 03 rpm软件包管理 04 yum软件包管理 05 源码安装python3.5 06 ssh服务 07 apache服务 08 samba服务...

Global site tag (gtag.js) - Google Analytics