TCP/IP协议概念

TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。

TCP/IP的分层

应用层:计算机应用程序沟通的层。如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)、超文本传输协议(HTTP)等

传输层:它提供了节点间的数据传送,应用程序之间的通信服务,主要功能包括数据格式化、传送数据的确认以及错误数据的重传,要传送的数据以及文件会在该层被拆分成更小的包,然后传递到下一层进行传输。而接收端的应用层会将接收到得数据包进行组装,还原为原始数据或文件。该层包含的协议有传输控制协议(TCP)、用户数据报协议(UDP)等。

网络层:负责对传输层拆分的数据包进行封装,形成一个个IP数据包,IP数据包里描述了数据到达目的主机的路径,如经过哪些路由等等。所以,网络层的主要作用就是根据传输层拆分的数据包信息,来选择传递过程中合适的路由,每个包最终到达目标地址的路由都有可能不同

网络接口层:接收来自网络层的IP数据包,在网络上进行传输。主要处理的工作包括规定如何将IP数据包转化为网络硬件可传送的样式(数据帧),并从一个网络接口传到下一个网络接口。

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和UDP区别

要清楚TCP和UDP的区别,首先要明白传输层的作用:在传递数据时,我们可以通过该层协议来控制一些数据传递的规则,比如说怎么对数据进行格式化、传递的数据是否需要等到目标主机的确认以及数据传送过程中出现异常,是否需要重新传送等等。

知道传输层作用后,我们可以分析出TCP和UDP的区别:

1. TCP是面向连接的传输控制协议(具体看TCP的三次握手),而UDP提供的是无连接的数据包服务;

2. 为确保正确地接收数据,TCP要求在目标计算机成功收到数据时发回一个确(即 ACK)。如果在某个时限内未收到相应的 ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。而UDP则无以上描述的功能,所以可能会出现丢失、重复、乱序等现象;

基于以上UDP和TCP的特点,可在实际的场景中选择合适的协议,如:

1). 类似于图像、声音等对可靠性要求不是很高的业务,可以采用UDP协议,它们对

准确性要求不高,但要求传输速度快;

2). 而类似于文本、文件、程序的传输对传输的可靠性要求比较高,则最好使用TCP

协议。

HTTP协议

HTTP协议是什么?简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。

HTTP协议能做什么?很多人首先一定会想到:浏览网页。没错,浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。

HTTP的一些协议规则的描述文章:

http://yyyyy5101.javaeye.com/blog/570768

HTTP的一些协议规则的描述文章:

http://shipmaster.javaeye.com/blog/747875

HTTP缓存的一些原理:

http://hi.baidu.com/jackywdx/blo ... cd659358ee9011.html

robbin的HTTP缓存

http://www.javaeye.com/topic/462476

SOCKET

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

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

所以,我的理解是:SOCKET只是个接口,是用来选择传输层的协议(TCP或UDP)来进行数据传输的接口。所以有些人拿SOCKET和HTTP来比较,我都不明白是怎么想的。

TCP/IP 、HTTP和SOCKET的更多相关文章

  1. http、TCP/IP协议与socket之间的区别

    http.TCP/IP协议与socket之间的区别     网络由下往上分为:  www.2cto.com   物理层--                       数据链路层-- 网络层--   ...

  2. http、TCP/IP协议与socket之间的区别(转载)

    http.TCP/IP协议与socket之间的区别  https://www.cnblogs.com/iOS-mt/p/4264675.html http.TCP/IP协议与socket之间的区别   ...

  3. Http TCP/IP协议和socket之间的区别和联系

    总结,TCP/IP是传输层协议,主要解决数据如何在网路中传输,socket是TCP/IP协议的具体实现,是对TCP/IP协议的封装和应用,属于程序员层面,HTTP是应用层协议,应用层协议很多,类似的像 ...

  4. JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

    OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...

  5. Linux TCP/IP 协议栈之 Socket 的实现分析(一)

    内核版本:2.6.37参考[作者:kendo的文章(基于内涵版本2.6.12)] 第一部份 Socket套接字的创建 socket 并不是 TCP/IP协议的一部份. 从广义上来讲,socket 是U ...

  6. 网络基础之 tcp/ip五层协议 socket

    1 网络通信协议(互联网协议) 1.1 互联网的本质就是一系列的网络协议 1.2 osi七层协议 1.3 tcp/ip五层模型讲解 1.3.1 物理层 1.3.2 数据链路层 1.3.3 网络层 1. ...

  7. c# TCP/IP协议利用Socket Client通信(只含客户端Demo)

    完全是基础,新手可以随意看看,大牛可以关闭浏览页了,哈哈. TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. ...

  8. TCP/IP协议和socket

    1.传输层基于tcp协议的三次握手和四次挥手? 传输层有两种数据传输协议,分别为TCP协议和UDP协议,其中TCP协议为可靠传输,数据包没有长度设置,理论可以无限长,而UDP协议为不可靠传输,报头一共 ...

  9. TCP/IP协议与Socket

    1.计算机网络体系结构分层 OSI 参考模型注重"通信协议必要的功能是什么", TCP/IP 则更强调"在计算机上实现协议应该开发哪种程序". 2.TCP/IP ...

  10. 基于TCP/IP协议的socket通讯server

    思路: socket必须要随项目启动时启动,所以需用Spring自带的监听器,需要保持长连接,要用死循环,所以必须另外起线程,不能阻碍主线程运行 1.在项目的web.xml中配置listener &l ...

随机推荐

  1. 通过Struts2Web应用框架深入理解MVC

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet. 一.用法简介: 1.Eclipse新建Dynamic Web Project, 项目名:Struts2Pro ...

  2. 洛谷P1062 数列 [2017年6月计划 数论03]

    P1062 数列 题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… ...

  3. 洛谷P2982 [USACO10FEB]慢下来Slowing down [2017年四月计划 树状数组01]

    P2982 [USACO10FEB]慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) c ...

  4. Faster RCNN算法训练代码解析(1)

    这周看完faster-rcnn后,应该对其源码进行一个解析,以便后面的使用. 那首先直接先主函数出发py-faster-rcnn/tools/train_faster_rcnn_alt_opt.py ...

  5. Data Visualisation Cheet Sheet

    Univariate plotting with pandas import pandas as pd reviews = pd.read_csv() reviews.head() //bar rev ...

  6. Codeforces 300C

    题目链接: http://codeforces.com/contest/300/problem/C 本来是道不难的题目,还是自己的数学功底不扎实. 从该题又一次巩固了关于乘法逆的概念,在剩余系中,如果 ...

  7. [LeetCode] Evaluate Reverse Polish Notation [2]

    题目 Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, ...

  8. Leetcode707.Design Linked List设计链表

    设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表,则还需要一个属性 ...

  9. $.ajax中contentType: “application/json” 的用法

    不使用contentType: “application/json”则data可以是对象 $.ajax({ url: actionurl, type: "POST", datTyp ...

  10. JS中获取URL的参数的方法

    这里,我学习的是使用正则的方法来获得URL的参数 函数的方法如下: <a href="www.baidu.com">百度</a> <script sr ...