轻装上阵Flink--在IDEA上开发基于Flink的实时数据流程序

前言

      本文介绍如何在IDEA上快速开发基于Flink框架的DataStream程序。先直接上手!

环境清单

      案例是在win7运行。安装VirtualBox,在VirtualBox上安装Centos操作系统。所有资源都在百度云上,有需要请直接下载。安装教程基本都是傻瓜式,文章不做讲述,有需要直接网上搜索。

资源 版本
VirtualBox 5.2.16
Centos 6.5
Maven 3.6.3
JDK 8u241
IDEA 2019.3.2
Flink 1.10.0

链接:http://pan.baidu.com/s/12rXlY_z_Fck8-NRXdZ5row

提取码:qt2p

轻装上阵

1、IP设置

      Centos的设置静态IP为192.168.2.20,关闭防火墙

1 vi /etc/sysconfig/network-scripts/ifcfg-eth0
2 DEVICE=eth0
3 TYPE=Ethernet
4 ONBOOT=yes #开机启动eth0网卡
5 NM_CONTROLLED=yes
6 BOOTPROTO=static
7 IPADDR=192.168.2.20
8 GATEWAY=192.168.2.1
9 NETMASK=255.255.255.0
     如果此时ping www.baidu.com等不通,需要我们添加dns服务器。
1 [root@localhost network-scripts]# vi /etc/resolv.conf
2 nameserver 192.168.2.1
  重新启动网络服务
1 [root@localhost network-scripts]# service network restart                   
2 正在关闭接口 eth0:[确定]
3 关闭环回接口:[确定]
4 弹出环回接口:[确定]
5 弹出界面 eth0:Determining if ip address 192.168.2.20 is already in use for device eth0...
6                                                            [确定]
      关闭防火墙
1 [root@localhost network-scripts]# service iptables stop

2、创建项目

   在win7的命令行下,用mvn命令创建开发模板

1 mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-java -DarchetypeVersion=1.10.0
这种方式允许你为新项目命名。它将以交互式的方式询问你项目的 groupId、artifactId 和 package 名称。
用tree命令看下,如下结构。项目是一个 Maven project,它包含了两个类:StreamingJob 和 BatchJob
分别是 DataStream and DataSet 程序的基础骨架程序。main 方法是程序的入口,既可用于IDE测试/执行,也可用于部署。
 1 │  pom.xml
 2 └─src
 3     └─main
 4         ├─java
 5         │  └─com
 6         │      └─ryan
 7         │              BatchJob.java
 8         │              StreamingJob.java
 9         └─resources
10                 log4j.properties
3、写一个自己的DataStream的程序

 功能介绍:WindowWordCount.java,5s为一个时间窗口,摄取数据源的数据,计算单词出现的次数。

 实时数据流计算简易架构图:

为了演示方便,这里我们只演示消息队列和Flink Job两个模块,利用nc工具来替代消息队列作为Flink Job摄取的数据源。

代码:

 1 package com.ryan;
 2 import org.apache.flink.api.common.functions.FlatMapFunction;
 3 import org.apache.flink.api.java.tuple.Tuple2;
 4 import org.apache.flink.streaming.api.datastream.DataStream;
 5 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
 6 import org.apache.flink.streaming.api.windowing.time.Time;
 7 import org.apache.flink.util.Collector;
 8 public class WindowWordCount {
 9     public static void main(String[] args) throws Exception {
10         StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
11         DataStream<Tuple2<String, Integer>> dataStream = env
12                 .socketTextStream("192.168.2.20", 9999)
13                 .flatMap(new Splitter())
14                 .keyBy(0)
15                 .timeWindow(Time.seconds(5))
16                 .sum(1);
17         dataStream.print();
18         env.execute("Window WordCount");
19     }
20     public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
21         @Override
22         public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
23             for (String word: sentence.split(" ")) {
24                 out.collect(new Tuple2<String, Integer>(word, 1));
25             }
26         }
27     }
28 }

在centos机器上,命令行启动nc

1 nc -lk 9999

IDEA上直接run main方法,然后在centos机器上,不断输入单词。

1 [ryan@localhost ~]$ nc -lk 9999
2 java
3 java
4 shen
5 深圳 深圳
IDEA控制台上输出如下:

注意:第一次在IDEA上运行这个程序,可能会报如下异常

1 java.lang.NoClassDefFoundError: org/apache/flink/streaming/api/datastream/DataStream

原因是IDEA没有导入flink 的lib下的jar包。导入即可。

4、打包发布到centos平台上的Flink集群

      修改pom.xml文件的mainclass的值为com.ryan.WindowWordCount

1 <mainClass>com.ryan.WindowWordCount</mainClass>

      执行mvn clean install,得到flink-demo-1.0-SNAPSHOT.jar,并上传到centos机器上。

1 mvn clean install

      打开两个centos的控制台,一个用于打开nc,一个用于运行我们打包好的Flink jar包。

1 [ryan@localhost ~]$ nc -lk 9999
2 java
3 shen
4 深圳 深圳 深圳
1 [root@localhost flink-1.10.0]# bin/flink run flink-demo/flink-demo-1.0-SNAPSHOT.jar 
2 Job has been submitted with JobID 9931a9dfc2eddeb2d0b5ed15578bd488
  回到win7上,用浏览器打开http://192.168.2.20:8081/,在Running Jobs上,可以看到一条记录。

 

       在Task Managers上,Stdout模块看到程序输出的结果。

       所有代码都上传到github上,有需要的朋友可以下载

1 http://github.com/qinxiongzhou/flink-demo

       至此,我们完成了开发编译调试到最终上线生产运行。喜欢请关注公众号--程序猿牧场,谢谢!

 

周钦雄技术分享
本文转载于网络 如有侵权请联系删除

相关文章

  • CentOS 6.4下OpenSSH升级到6.7操作过程详解

    一、环境描述1)操作系统:CentOS6.464位2)Openssl版本:1.0.1e-15.el6,由于升级到openssh_6.7p1,需要OpenSSL的版本在0.9.8f以上,所以这里就不用升级openssl了。直接升级openssh就行了。3)Openssh升级前版本:openssh-5.3p1-94.el6;Openssh升级后版本:openssh_6.7p1(源码安装)4)连接工具xshell4。要预防超时断开连接。二、升级sshd到OpenSSH-6.7并删除老版本ssh1)升级前准备下载openssh-6.7p1.tar.gzhttp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.7p1.tar.gz备份ssh配置文件:#mv/etc/ssh/etc/ssh.bak查看是否缺包#rpm-qa|egrep"gcc|make|perl|pam|pam-devel|zlib|zlib-devel"如果有配置yum了的话可以直接yum安装这些包,这样既可以检验是否装了,没装的直接装上。yu

  • AV1硬件采用及未来发展

    #EditorialNote#在开放媒体联盟(AllianceforOpenMedia,AOMedia,AOM)中,硬件和软件开发人员共同创建了AV1标准规范。本次分享我们邀请来自谷歌的高级产品经理RoshanBaliga,他将从什么是AV1、AV1硬件的采用、AV1的开发以及商业测试、软件解码,以及其对AV1生态系统的重要性等方面来介绍AV1的硬件。文/RoshanBaliga 整理/LiveVideoStack大家好,欢迎来到由开放媒体联盟和LiveVideoStack共同主办的2021年开放媒体联盟峰会。我是谷歌的高级产品经理RoshanBaliga,从事开放视频编解码器的工作,致力于AV1硬件开发。 AV1标准规范是开放媒体联盟在2015年至2018年的三年时间开发的。开放媒体联盟原本由7家公司组成,此后,会员数量迅速增长,许多公司都为AV1的研发做出了贡献。如今开放媒体联盟在全球拥有超过47家公司会员。#1.具有AV1硬件的设备这次峰会的其他演讲会集中讨论AV1的软件开发工作,而我想讨论的是AV1的硬件。已经发布三年。我们在AV1硬件被推向市场这方面取得了巨大的成功,而这一成

  • Hadoop项目:从cdn日志统计直播流量

    从在用的四家cdn的大量日志中,统计出每场直播的流量数据,包括国内流量和海外流量。获取日志目前已有的数据来源:四家cdn服务商。每个服务商都有自己不同的日志接口,不同的日志获取方式,可以把日志类型分为:网宿日志、帝联日志、阿里日志,腾讯日志 直播日志、录播日志 hls日志、rtmp日志、rtmpdist日志、hdl日志,不同协议日志的域名都不相同。 各家厂商cdn日志的收集方法参见各自官网。获取到的日志示例文件名如下:cdn_codelog_namenetcenter2017-12-06-2300-2330_rtmp-wsz.qukanvideo.com.cn.log.gzdnionhls-d.quklive.com_20180509_03_04.gzalicdnplay-a.quklive.com_2017_12_07_1100_1200.gzqukan->alicdnrecordcdn-sz.qukanvideo.com_2017_12_06_1800_1900.gztencent2017120607_hangzhouqukan.cdn.log.gz可以从文件名判断属于日志所

  • 大数据学习初学者必知的十大机器学习算法

    本文先为初学者介绍了必知的十大机器学习(ML)算法,并且我们通过一些图解和实例生动地解释这些基本机器学习的概念。我们希望本文能为理解机器学习基本算法提供简单易读的入门概念。机器学习模型在《哈佛商业评论》发表「数据科学家是21世纪最性感的职业」之后,机器学习的研究广受关注。所以,对于初入机器学习领域的学习者,我们放出来一篇颇受欢迎的博文——《初学者必知的十大机器学习算法》,尽管这只是针对初学者的。机器学习算法就是在没有人类干预的情况下,从数据中学习,并在经验中改善的一种方法,学习任务可能包括学习从输入映射到输出的函数,学习无标签数据的隐含结构;或者是「基于实例的学习」,通过与存储在记忆中的训练数据做比较,给一个新实例生成一个类别标签。基于实例的学习(instance-basedlearning)不会从具体实例中生成抽象结果。机器学习算法的类型有三类机器学习算法:可以这样来描述监督学习:使用有标签的训练数据去学习从输入变量(X)到输出变量(Y)的映射函数。Y=f(X)它分为两种类型:a.分类:通过一个给定的输入预测一个输出,这里的输出变量以类别的形式展示。例如男女性别、疾病和健康。b.回归

  • 【经验总结】Python3 Requests 模块请求内容包含中文报错的解决办法

    0x00前言最近在写一个爬虫代码,里面需要使用get传参中文,但是如果直接使用中文而不对其编码的话,程序将会报错。UnicodeEncodeError:'latin-1'codeccan'tencodecharactersinposition38-39:ordinalnotinrange(256)复制0x01网上的一些解决办法参考网上的解决办法,比如下面的几种办法。1、在中文后加上".encode('GBK')" 2、在文件头部加上"#coding=utf-8" 3、在中文后加上".encode('utf-8')"复制这几种方法在我这里都行不通,抓包也可以看到数据包里的中文并不是我们想象的经过URL编码的字符。GET/test=b'%5Cxe6%5Cxb5%5Cx8b%5Cxe8%5Cxaf%5Cx95'HTTP/1.1复制0x02可行的办法最后才意识到,其实并不需要对中文进行GBK、UTF-8转码,而应该对其进行URL编码。fromur

  • python资源库——socket网络编

    sockket简介socekt又称为‘套接字’,用于描述IP和地址端口,是一个通信链路的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求。socket起源于Unix,所以也遵从“一切皆文件”的基本哲学,对于文件,进行打开/读取/关闭的操作模式。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。socket和file文件的区别:file模块是针对指定文件进行打开、读写、关闭操作。socket模块是针对服务器和客户端socket进行打开、读写、关闭操作。Socket对象sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)参数一:地址簇sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)参数一:地址簇参数描述socket.AF_INETIPv4(默认)socket.AF_INET6IPv6ocket.AF_UNIX只能够用于单一的Unix系统进程间通信参数二:类型参数描述socket.SOCK_

  • 腾讯云基础网络和私有网络那个好?

    腾讯云基础网络和私有网络有什么区别?最近小编在腾讯云论坛上发现有用户讨论基础网络和私有网络的区别之处,所以小编就整理了他们之间的区别给大家分享,希望能够帮助到一些用户。腾讯云新客专属福利2860元代金券https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=09ff33cfb418db124451885bff0af0c4&from=console腾讯云热卖云产品3折起https://cloud.tencent.com/redirect.php?redirect=1014&cps_key=09ff33cfb418db124451885bff0af0c4&from=console网站解决方案-3折特惠https://cloud.tencent.com/redirect.php?redirect=1027&cps_key=09ff33cfb418db124451885bff0af0c4&from=console   腾讯云基础网络和私有网络有什么区别?但从用户关联上讲,基础网络是

  • 【报告】全球最有价值金融科技250强,区块链企业异军突起!

    CBInsights每年都会发布全球最有价值金融科技250强企业,找出全世界有潜力颠覆金融业的未上市公司。从保险到区块链到贷款到财富管理再到监管科技,CBInsights按照顺序列出了全球金融科技各个领域的企业。微信后台回复:“榜单”,获取本文报告。“未来十年金融业所经历的变革要比前100年都要猛烈,”CBInsights首席执行官AnandSanwal预测说。“并且这种颠覆主要是由一些优秀的颠覆性创业公司推动的。我们列出的全球金融科技250强企业是这些颠覆性企业中最具潜力的。他们将新兴技术和商业模式引入金融业,这将永远地改变我们管理资金的方式和金融商业模式。”CBInsights使用“数据驱动型/算法程序”列出了上榜的金融科技企业,通过其机器学习技术以及数千个企业和个人提交的申请制作而成。CBInsights的Mosaic算法考虑了以下主要因素:·势头—考虑非传统因素包括新闻媒体报道,情绪,就业数据/招聘,社交媒体,网络浏览量和使用次数,合作情况等等。·市场—对企业所处领域和行业进行量化分析,包括融资,融资企业数,退出情况,以及招聘情况。·资金—评估财务状况包括近期融资以及总融资金额

  • Ghostscript 中 ps2pdf 命令在 windows msys 下的运行错误问题。

      前两天看到了miloyip/game-programmer这个项目觉得特别有用,真是好东西,明确了指出了学习路线,尤其是新手。不过打开看,有些书对应的亚马逊链接是无效的,比如《Tricksofthe3DGameProgrammingGurus》等书的链接都是:https://www.amazon.com/dp//这种无效链接,于是我就fork了一份把这些链接都补上了,提交了一个pullrequest,就看作者什么时候能通过merge了,修改好我就尝试编译测试,由于是直接通过make生成,我windows本机已经安装了msys,于是我就安装了windows版本的:Graphviz2.38, Ghostscript9.16(ps2pdf),cpdf,安装完后把可执行文件的目录添加到PATH系统环境变量,Ghostscript需要把安装目录下的bin,lib,都添加进去;ok以后运行发现到最后总是提示ps2pdfwr:gsnotfound;翻阅了下本地manualPs2pdf.htm,其中写道: Allofthesescriptsactuallycallascriptna

  • Centos7 使用 chronyd 进行时钟同步

    背景 最近要做阿里云迁移IDC机房,整理下Linux运维基线,简单记录,以备后用~ 安装 #默认已经安装 $yuminstall-ychrony 复制 配置文件 $cat/etc/chrony.conf #Usepublicserversfromthepool.ntp.orgproject. #Pleaseconsiderjoiningthepool(http://www.pool.ntp.org/join.html). #国家服务器 server0.cn.pool.ntp.org server1.cn.pool.ntp.org server2.cn.pool.ntp.org server3.cn.pool.ntp.org #阿里 serverntp.aliyun.com #腾讯 servertime1.cloud.tencent.com servertime2.cloud.tencent.com servertime3.cloud.tencent.com servertime4.cloud.tencent.com servertime5.cloud.tencent.com #苹果 s

  • 光模块硬件学习

    1.PAM4 PAM4是PAM(PulseAmplitudeModulation,脉冲幅度调制)调制技术的一种。PAM信号是继NRZ(Non-Return-to-Zero)后的热门信号传输技术。     如上图所示,NRZ只有两种信号电平表示数字逻辑信号,而PAM4有四种;因此在相同波特率条件下,PAM4信号比特速率是NRZ的2倍。因其高效的传输效率,IEEE802.3已确定在400GE/200GE/50GE接口中的物理层采用50Gbps/lane(简称50G)PAM4编码技术。 Don'tRepeatYourself!

  • 本地文件上传到远程服务器

      win7下:   用putty好像不太行。用secureCRT非常方便。   步骤如下:   1、设置好上传和下载的目录;   2、输入rz,点Enter;   3、会弹出对话框,选择要上传的文件;   4、上传,会显示百分比、速率和时间等信息。      从远程服务器下载文件到本地的命令是:szfilename     前段时间装了ubuntu,不再使用win7了.所以想起来要更新下这篇文章.Ubuntu下,我喜欢用的工具是terminator,当然linux下好用到工具太多了.随个人喜好.   ubuntu下:   从服务器拷到本地:   scp服务器文件 本地目录    eg:     scproot@114.215.173.116:/home/wwwroot/dsp/taobao/文件名/home/tjx     如果把目录下所有文件都拷贝,那就把文件名换成'*'即可   从本地上传到服务器,一样的,交换scp后面两个参数的位置即可.

  • 机械制图中各种孔的标注方法

     

  • 8比

    上六 比之无首,凶。 象曰:比之无首,无所终也。 经文意思是:结交不到首领,凶。 象辞意思是:结交不到首领,不会有善终。 上六处于比卦的最上面的位置,可是下面的众阴爻都比亲于九五,所以上六得不到众阴爻的比亲。而他本为最上位,又不能下来比亲九五,所以他的处境很凶险。[2] 九五 显比,王用三驱,失前禽,邑人不诫,吉。 象曰:显比之吉,位正中也。舍逆取顺,失前禽也。邑人不诫,上使中也。 经文意思是:光明正大的交往,君王用三驱之礼狩猎,结果失去前面的禽兽。老百姓不惧怕君王,吉祥。 象辞意思是:光明正大的交往之所以会吉祥,是因为九五保持中正。舍弃叛离,客纳归顺,所以失去前面的禽兽;百姓不惧怕君王,是因为君王以中正治国,平易近人。 君王亲比普天下的民众,以仁义之心治理天下。他打猎时用三驱之礼,三驱之礼是说打猎时得到了一等猎物送到宗庙进行祭祀,二等的猎物招待宾客,三等的猎物君王自已享用。君王这样善待群臣,连老百姓见到他也不感到害怕,这么贤明的君王,怎么会不吉祥呢?六四 外比之,贞吉。 象曰:外比于贤,以从上也。 经文意思是:结交外面的朋友,守正道则吉祥。 象辞意思是:结交外面贤明的人,是为了一起顺

  • springMVC java.lang.IllegalStateException: getOutputStream() has already bee

    在导出文件的时候,一直报这个错误。 网上一般的做法是out.clear();或者使用servlet或者Action返回null。 试过了这些方法都不成功。 最后直到试了在jsp重定向的方法才成功了。  location.href="${baseURL}/order/order/exportOrder.do"; 而不是用页面上ajax发送请求的方式。 估计是不同页面,response不同所以没有照成冲突。

  • C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

    C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 这通常是由于软件冲突/病毒引起的网络参数错误。 用管理员身份运行CMD,输入netsh winsock reset并回车(注意,必须是已管理员身份运行,这个重置LSP连接)

  • 最短路径

    6.6.2最短路径 ​假若要在计算机上建立一个交通咨询系统,则可以采用图的结构来表示实际的交通网络。如图6.21所示,图中顶点表示城市,边表示城市间的交通联系。例如,一位旅客要从A城到B城,他希望选择一条中转次数最少的路线。假设图中每一站都需要换车,则这个问题反映到图上就是要找一条从顶点A到B所含边的数目最少的路径。只需从顶点A出发对图做广度优先搜索,一旦遇到顶点B就终止。由此所得的广度优先生成树上,从根顶点A到顶点B的路径就是中转次数最少的路径,路径上A与B之间的顶点数就是中转次数,但是,这只是一类最简单的图的最短路径问题。有时,对于旅客来说,可能更关心的是节省交通费用;而对千司机来说,里程和速度则是他们感兴趣的信息。为了在图上表示有关信息,可对边赋以权,权的值表示两城市间的距离,或途中所需时间,或交通费用等。此时路径长度的度最就不再是路径上边的数目,而是路径上边的权值之和。考虑到交通图的有向性,例如,汽车的上山和下山,轮船的顺水和逆水,所花费的时间或代价就不相同,所以交通网往往是用带权有向网表示。在带权有向网中,习惯上称路径上的第一个顶点为源点(Source),最后一个顶点为终点(

  • 制作第一个微信小程序

        正好有空,应朋友要求,研究下小程序怎么做。     前提:个人没接触过小程序这块,前端水平很水,写过原生js,用过jquery,其他js相关的,除了有时候改过一些,没怎么做过。样式基本不会。     首先,注册小程序开发账号,下载开发工具,这个看官方,就不说了。  我下载的是NightlyBuild,打开后直接可以建立第一个小程序,选择目录即可,就不多说了。    程序结构          通过工具新建小程序后,程序目录如下:   project.config.json据说是工具配置,不提了                   1.a

  • JS_10

    一、DOM的认知 JS是由三部分组成: ECMAScript:简称ES,它是欧洲计算机协会大概每年的六月中旬定制的语法规范 DOM:全称documentobjectmodel即为文档对象模型 BOM:全称browserobjectmodel即为浏览器对象模型 1.1、节点树 概述:节点即为标签。节点之间的关系称为节点树。    DOM:文档对象模型可以理解为是整个节点树最外层‘根元素’  DOM其实就是JS语言中内置引用类型document对象,DOM对象经常用来操作节点(标签)。比如:操作节点的样式、属性、文本 <script> //DOM:内置document对象,引用类型数据 //DOM是整个页面元素的‘根元素’ console.log(document); console.log(typeofdocument); </script> 复制 1.2、DOM属性  概述:DOM:documentobjectmodel:在JS中是一种引用类型的数据,官方提供了很多的属性和方法进行操作标签 1.2.1、docume

  • 凸优化理论介绍

      因为本人近期在学习凸优化的内容,所以决定第一篇帖子写一些关于凸优化理论的相关介绍,希望对那些对凸优化有兴趣的同学和初学者有帮助。   首先想要和大家说的是,凸优化听上去是一门很高深的数学理论,其实学习凸优化的基础要求其实并不是很高,对于大部分大学理工科的本科生应该都没有问题,关键就是高等数学和线性代数的知识,对这两门课有所了解的话,只要你肯下工夫,肯定没问题。而且凸优化在现在很多的领域都有所应用,例如信号处理、算法设计、机器学习等等。   还有就是想要和大家说的,目前国内很好的凸优化方面的书籍、资料确实很少,即使有,也有点过时了,大多数的资料都是国外的,所以也需要有比较好的英文功底。目前国外学术界在凸优化方面做得比较好的有两位,分别是MIT的DimitriP.Bertsekas和斯坦福大学的StephenBoyd。我在这里重点推荐大家一些好的学习资料,方便大家学习凸优化的知识。   第一个也是最重要的就是StephenBoyd做的一个关于ConvexOptimization的视频,该视频是斯坦福大学的公开课,在大多数的视频网站上面都可以下载,例如youtube、iTunes等,这里

  • OSI七层网络模型&amp;TCP&UDP&amp;三握四挥

    网络七层网络七层图形         OSI七层协议       OSI各层详解 物理层:在连接各种计算机的传输媒体上传输数据比特流(将我们发送的数据转换成二进制比特流传输)数据链路层:将比特流组合成字节进而组合成帧,使用用MAC地址寻址(我们所说的二层交换机就工作在这一层)网络层:使用ip地址寻址,实现不同网络之间的路径选择。(我们所说的路由求就工作在这一层)传输层:传输层定义了主机与应用程序之间端到端的连通性,是源端到目的端对数据传送进行控制从低到高的最后一层。会话层:建立、管理、终止会话。(在五层模型里面已经合并到了应用层)表示层:数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)应用层:网络服务与最终用户的一个接口。TCP三次握手三次握手 ####1、第一次握手#建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认。 ####2、第二次握手#服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时

相关推荐

推荐阅读