SlideShare a Scribd company logo
TCP/IP 스터디
2010-12-06

발표자 : 김연수

1
Contents Table
Ⅰ. 소켓의 이해

Ⅲ. 자바 I/O와 NIO의 비교

1. 소켓이란?(개요, 타입)

1. 자바 I/O와 NIO의 비교

2. 인터넷 주소 체계
3. 소켓 생성 및 연결

4. 바이트 순서
5. 소켓 옵션

Ⅱ. TCP/IP의 이해
1. TCP/IP란?(개요, 헤더 등)
2. TCP/IP 4계층의 데이터 전송
3. TCP의 내부 구조

2
Ⅰ. 소켓의 이해
1. 소켓이란?
2. 인터넷 주소 체계
3. 소켓 생성 및 연결
4. 바이트 순서
5. 소켓 옵션

3
소켓이란?

I. 소켓의 이해

소켓이란?
인터넷 소켓(Internet socket, socket' 혹은 network socket 라고 부르기도 한다)은 네트워크로 연결되어 있
는 컴퓨터의 통신의 접점에 위치한 통신 객체다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이
소켓을 통해서 서로 데이터를 교환한다. 소켓은 RFC 147에 기술사항이 정의 되어 있다.

TCP

UDP

• 연결형 프로토콜

• 비 연결형 프로토콜

- 연결이 성공해야 통신 가능

- 연결 없이 통신 가능

• 데이터 경계를 구분 하지 않음

• 데이터 경계를 구분함

- 바이트 스트림(byte-stream) 서비스

- 데이터 그램(datagram) 서비스

• 신뢰성 있는 데이터 전송

• 비 신뢰적인 데이터 전송

- 데이터를 재전송함

- 데이터를 재전송하지 않음

• 1 대 1(unicast)

• 1 대 1(unicast)
1 대 다(broadcast)

다 대 다 통신(multicast)

4
인터넷 주소 체계

I. 소켓의 이해

인터넷 주소 체계
IP 주소란, 인터넷상에 존재하는 호스트들을 구분하기 위한 32비트 주소 체계를 의미한다. 4바이트 IP 주
소는 네트워크 주소와 호스트 주소로 나뉘며, 주소의 형태에 따라 A, B, C, D, E 클래스로 분류할 수 있다.
IPv4는 32Bit 이고, IPv6는 128Bit로 구성되어 있다.

class

1byte

1byte

A

0 Network ID

B

10

C

110

D

1110

1byte

1byte

Host ID
Host ID

Network ID

Host ID

Network ID
Multicast Address

5
소켓 생성 및 연결

I. 소켓의 이해

소켓 생성 및 연결
소켓으로 통신하기 위해서는 소켓을 생성 및 연결하여야 한다.
Server side

Client side

서버나 클라이언트나 통신을 위해서는 소켓을 생성해줘야
합니다.(TCP, UDP 선택)

bind() : 소켓의 부착

socket()

socket()

bind()

bind()

생성된 빈 소켓을 시스템에 부착하는 것은 소켓이
외부로의 연결을 만들 수 있는 접점을 가지게 되는 것이
됩니다.

listen() : 서버측 연결 큐의 작성
클라이언트로부터 연결을 받기 위한 서버측 포트에
소켓이 부착됩니다. 바인드를 했지만 TCP는 연결 과정을
거쳐야 하기 때문에 연결큐가 필요합니다. 연결 큐를
만드는 작업이 listen을 호출하는 부분입니다.

listen()

accept()

make connection

recv(), send()

exchange data

finish connection
close()
passive close

socket() : 소켓의 생성

connect()

recv(), send()

close()
active close

connect() : 서버로 연결
이제 서버측이 준비가 끝났으면, 클라이언트 측은
서버가 LISTEN 하고 있는 포트로 접속하기 위해서
connect()함수를 사용합니다.
accept() : 클라이언트의 연결 수용
서버나 클라이언트나 통신을 위해서는 소켓을 생성해줘야
합니다.(TCP, UDP 선택)

close(), shutdown() : 연결 종료
해당 프로세스 내에 연결된 소켓이 닫힌다(recv()
중인곳도 닫힘)

6
바이트 순서

I. 소켓의 이해

바이트 순서
바이트 순서는 시스템이 내부적으로 데이터를 표현하는 방법을 의미한다. 모든 시스템의 내부적인 데이터
표현 방식이 같은 것은 아니다. 크게 두가지 방법으로 나뉘는데, Big-Endian 방식과 Little Endian 방식이
있다.
Big-Endian 방식(상위 바이트의 값이 메모리상에 먼저
표시되는 방법)

0x12

0x34

0x56

0x78

어떤 방식을 쓰느냐?

시스템의 CPU가
결정(호스트 바이트
순서)

메모리 번지수가 증가하는 방향
Little-Endian 방식(하위 바이트의 값이 메모리 상에 먼저
표시되는 방법)

Big-Endian

Little-Endian

Motorola 68000 계열

0x78

0x56

0x34

Intel x86 계열

0x12
서로 다를 경우
바이트 순서 변환!

메모리 번지수가 증가하는 방향
7
소켓 옵션

I. 소켓의 이해

SO_SNDBUF









SO_REUSEADDR





SO_KEEPALIVE

소켓의 특성을 변경시켜
사용하여야 할 경우
소켓에 옵션을 설정하게 된다.

set

SO_RCVBUF

SOL_SOCKET

get





SO_BROADCAST

소켓 옵션

Protocol Level

Option Name





•

입력 및 출력 버퍼의 크기

SO_DONTROUTE





•

데이터 전송 방식(TCP or UDP)

SO_OOBINLINE





•

TTL(Time to live)

SO_ERROR



IP 패킷 내에 있는 값으로, 그 패킷

SO_TYPE



IP_TOS





IP_TTL





IP_MULTICAST_TTL





IP_MULTICAST_LOOP





IP_MULTICAST_IF





TCP_KEEPALIVE





TCP_NODELAY





TCP_MAXSEG





이 네트웍 내에 너무 오래 있어서

IPPROTO_IP

버려져야하는지의 여부를 라우터
에게 알려준다.

IPPROTO_TCP
소켓의 다양한 옵션들

8
소켓 옵션

I. 소켓의 이해

소켓 옵션

•

SOL_SOCKET : 소켓 레벨의 옵션을 변경

•

IPPROTO_IP : IP 레벨의 옵션을 변경

•

IPPROTO_TCP : TCP 레벨의 옵션을 변경

SOL_SOCKET 레벨의 옵션
옵션

설명

SO_BROADCAST

방송형 메시지 전송 허용(UDP)

SO_DEBUG

DEBUG 모드를 선택

SO_RESUSEADD
R

주소 재사용 선택

SO_LINGER

소켓을 닫을 때 미 전송된 데이터가 시간만큼 기다렸다가 소켓을 닫음(TCP)

SO_KEEPALIVE

TCP의 Keep Alive 동작 선택(TCP)

SO_OOBINLINE

OOB 데이터를 일반데이터처럼 읽음

SO_RCVBUF

수신버퍼의 크기 변경

SO_SNDBUF

송신버퍼의 크기 변경

9
소켓 옵션

I. 소켓의 이해

소켓 옵션
IP_PROTO_IP 레벨의 옵션
옵션

설명

IP_TTL

Time To Live 변경

IP_MULTICAST_TTL

멀티캐스트 데이터그램의 TTL 변경(UDP)

IP_ADD_MEMBERSHIP

멀티캐스트 그룹에 가입(UDP)

IP_DROP_MEMBERSH
IP

멀티캐스트 그룹에서 탈퇴)UDP)

IP_MULTICAST_LOOP

멀티캐스트 데이터그램의 loopback 허용 여부(UDP)

IP_MULTICAST_IF

멀티캐스트 데이터그램 전송용 인터페이스 지정(UDP)

IP_PROTO_TCP 레벨의 옵션
옵션

설명

TCP_KEEPALIVE

Keep Alive 확인 메시지 전송 시간 지정

TCP_MAXSEG

TCP의 MSS(최대 메시지 크기) 지정
(TCP)

TCP_NODELAY

Nagle 알고리즘의 선택(TCP)

10
Ⅱ. TCP/IP의 이해
1. TCP/IP란?
2. TCP/IP 4계층의 데이터 전송
3. TCP의 내부구조

11
TCP/IP란?

Ⅱ. TCP/IP의 이해

TCP/IP란?
전송 제어 프로토콜(Transmission Control Protocol, TCP, 문화어: 전송조종규약)는 네트워크의 정보 전달
을 통제하는 프로토콜이다. 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF)의
RFC 793에 기술되어 있다. TCP는 IP 위에서 동작하는 프로토콜로 흔히 TCP/IP로 표기한다. 데이터의 전
달을 보증하고 보낸 순서대로 받게 해 준다.
TCP는 패킷의 교환을 근간으로 하는 인터넷 프로토콜(IP, Internet Protocol)을 기반으로
작동한다. 패킷은 헤더와 바디로 구성된 바이트 단위의 짧은 신호이다. 헤더는 데이터의
수신처에 대한 정보가 들어가며 바디에 전달할 데이터가 실린다. 패킷은 회선이 혼잡할
경우 IP 프로토콜에서 폐기될 수 있기 때문에 다른 경로를 가진 두 개의 라우터를 통해
수신처에 전달된다. TCP는 패킷의 폐기로 인해 잘못된 명령이 전달되더라도 어플리케
이션으로부터 기반 패킷을 구성하여 폐기된 패킷을 다시 전달하도록 함으로써 네트워
크 혼잡에 의한 피해를 최대한 줄이도록 구성되어 있다.
(bit)
(source port)

(destination port)
(seq number)

TCP 헤더 제어 플래그
플래그

설명

URG

Uragent, 뒤의 uragent pointer 필드를 사용함
(긴급 데이터)

ACK

Acknowledgement, 앞의 ack number 필드를
사용함

(window size)

PSH

Push, 현재 세그먼트 데이터는 즉시 전달되
어야 함

(urgent pointer)

RST

Reset, 현재 연결을 재설정함

SYN

Synchronization, 새로운 연결 설정 요구함

FIN

Finish, 연결의 종료를 요구함

(ack number)

(Len)

(Reserved)
(Checksum)
(TCP options)

12
TCP/IP 4계층에 의한 데이터 전송

Ⅱ. TCP/IP의 이해

TCP/IP 4계층에 의한 데이터 전송
실제로 TCP/IP 4계층 어떻게 데이터가 전송되는지 웹 방식을 토대로 알아본다.
1

Application Layer
(Presentation Layer 포함)

2

Transport Layer
(Session Layer 포함)

3

Internet Layer
(Network Layer, Data Link Layer 포함)

4

Physical Layer

1

2
URL 입력을 통한
웹페이지 요청

3
인터넷 상에서 원하는
주소로 이동하기 위해
IP패킷으로 만듬

사용자의 요청 정보를
TCP 패킷으로 만듬

4
정보가 이더넷 카드로
보내지고 Internet 으로
나감

Internet으로 전송 되는 Flow 상세 설명
이더넷 카드는 TCP/IP 패킷을 바로 윗 계층(Internet Layer)로 보내는데, 여기에서 IP 패킷을 분석해서, 이 패킷에 어디에서 왔고 도착지가 어디인지를
판단한다.
그리하여 목적지가 자신이면 Transport Layer로 보내고, TCP 프로토콜을 사용하여, 메시지가 누락된게 있으면 다시 요청하고, 순서를 재조합하는 등
통신 메시지를 검사해서 이것을 다시 Application Layer로 보낸다.
Application Layer 에서는 웹서버(IIS, Apache 같은)가 통신 메시지를 HTTP 프로토콜에 준하여, 검사를 하여 사용자가 요청한 웹페이지를 읽어들여,
Transport 계층으로 보내게 된다. 웹페이지를 브라우저까지 전송하는 과정은 위의 정반대의 과정을 순차적으로 거치게 된다.

13
TCP/IP 내부 구조

Ⅱ. TCP/IP의 이해

TCP/IP 내부 구조
TCP 기반의 소켓이 연결되어서 데이터를 송, 수신하고 종료되기까지 총 3단계를 거치게 된다. 그 단계를
자세히 보면 아래와 같다.
1] 첫 번째 단계 : 연결 설정

A

B
SYN
SEQ: 1000, ACK: -

SYN+ACK
SEQ: 2000, ACK: 1001

ACK
SEQ: 1001, ACK: 2001

1. 첫 번째(A가 B에게) : A가 B에게 전송할 데이터가 있으니, 연결을 하자는 의미로
SYN(synchronization) 패킷을 전송한다(SYN 안에는 SEQ와 ACK 정보가 들어 있고, 이 정보는
현재 보내는 패킷에 넘버를 부여해서 서로간의 데이터 수신 유무를 확인하는 데 사용 된다.)
2. 두 번째(B가 A에게) : 연결 준비가 다 되었다는 의미로 B는 A에게 SEQ 2000, ACK 1001이라는
패킷을 보내게 된다.
ACK 1001은 “좀 전에 전송해준 SEQ가 1000인 패킷은 잘 받았으니 다음 번 데이터 전송
시에는 SEQ 넘버 1001를 보내달라” 라는 의미이다. 그리고 B도 A와 마찬가지로 수신 확인을
위해서 패킷에 SEQ 2000을 부여하고 있다.
이 패킷의 특징은 B도 ‘준비가 되었다’는 SYN의 의미도 지니지만, 이전에 A가 보낸 패킷의
확인 응답 기능도 지니고 있으므로 SYN+ACK(Acknowledgement) 메시지가 된다.
3. 세 번째(A가 B에게) : 마지막으로 전송하는 패킷은 다음의 의미를 지닌다. 좀 전에 보내준
패킷을 잘 받았으니 이제 데이터를 주고 받읍시다. A도 마지막으로 B에게 SEQ 2000인 패킷을
잘 받았다는 의미로 ACK 2001을 보내고 있다.
* 서로간에 데이터를 주고 받을 수 있다는 것을 완벽히 확인하는데 세 번의 패킷 전송이 있었다.
따라서 이것을 가리켜 three-way handshaking이라 한다

14
TCP/IP 내부 구조

Ⅱ. TCP/IP의 이해

TCP/IP 내부 구조
TCP 기반의 소켓이 연결되어서 데이터를 송, 수신하고 종료되기까지 총 3단계를 거치게 된다. 그 단계를
자세히 보면 아래와 같다.
2] 두 번째 단계 : 데이터 송/수신

A

B
SEQ : 1301, 100bytes

ACK : 1401

Time out

1. A에서 B로 100바이트를 전송하면서 SEQ 1301을 전송한다. 따라서 다음번에 패킷을
전송할 때는 SEQ 1302가 아니라, 100바이트를 전송했으므로 SEQ 1401이 되어야 한다.
2. 또 다시 A가 B로 100바이트를 전송하면서 SEQ 1401을 전송해 준다. 그런데 중간에
소멸되고 말았다. 이러한 경우 A는 일정 시간이 지나도 ACK가 돌아 오지 않으면
재전송을 시작한다. 결국 B는 패킷을 수신하게 되고 ACK 1501을 전송한다.

SEQ : 1401, 100bytes

SEQ : 1401, 100bytes

ACK : 1501

15
TCP/IP 내부 구조

Ⅱ. TCP/IP의 이해

TCP/IP 내부 구조
TCP 기반의 소켓이 연결되어서 데이터를 송, 수신하고 종료되기까지 총 3단계를 거치게 된다. 그 단계를
자세히 보면 아래와 같다.
3] 세 번째 단계 : 연결 종료

A

B
FIN
SEQ : 5000, ACK : -

ACK
SEQ : 7500, ACK : 5001

FIN
SEQ : 7501, ACK : 5001

ACK
TIME_WAIT

SEQ : 5001, ACK : 7502

1. 첫 번째(A가 B에게) : 종료 요청 메시지를 담은 패킷을 전송한다.
FIN(finish)이라 한다.
2. 두 번째(B가 A에게) : 패킷을 잘 받았다는 ACK를 보낸다.
3. 세 번째(B가 A에게) : 종료 해도 좋다는 FIN을 A에게 보낸다.
4. 네 번째(A가 B에게) : 최종적인 수신 응답 메시지 ACK를 전송한다.
* 이렇게 종료 단계는 네 단계에 걸쳐서 진행되기 때문에 four-way handshaking이라 한다.
** TIME_WAIT : four-way handshaking 과정이 끝난 상태에서 A의 소켓이 바로 소멸되는
것이 아니라, TIME_WAIT 상태에 들어가게 된다. 반면에 B는 바로 연결이 종료되고
소켓이 소멸된다. 즉, 먼저 연결 종료를 요청할 경우 TIME_WAIT 상태를 거치게 된다.
B에게서 FIN을 받고 마지막 ACK 전송 실패 시 재전송을 위해 TIME_WAIT 상태 존재.
이것은 SO_REUSEADDR 옵션을 사용해주면, TIME_WAIT 상태에 있는 소켓에
할당되어 있는 IP 주소와 Port를 새로 시작하는 소켓에 할당해 주게 된다.

16
Ⅲ. 자바 I/O와 NIO의 비교
1. 자바 I/O와 NIO의 비교

17
자바 I/O와 NIO의 비교

Ⅱ. TCP/IP의 이해

자바 I/O와 NIO의 비교
기존의 자바 IO는 블록킹 IO이므로 C나 C++의 IO에 비해 상당히 느렸었다. 그러나 JDK 1.4에서는 운영체
제 수준의 네이티브 기능을 적극적으로 활용하는 NIO가 도입되어, 자바 IO의 단점을 보완하였다.
IO 흐름
유저 영역

프로세스
버퍼

커널 영역
read()

DMA

버퍼

하드웨어

디스크
컨트롤러

디스크

유저 영역은 일반적인 프로세스들이 존재하는 제한된 권한을 갖는 영역이다. 유저 영역 안의 프로세스들은 하드웨어 장치나 다른
프로세스에 직접적으로 접근할 수 없기 때문이다.
커널 영역은 운영체제에 존재하는 영역으로서 하드웨어 장치에 직접적으로 접근하고 다른 프로세스를 제어할 수 있는 권한이 있다.
자바에서 파일 읽기를 시도하면 제일 먼저 커널에 명령을 전달한다. 커널은 시스템 콜(read())을 사용해서 디스크 컨트롤러가 물리적
디스크로부터 읽어온 파일 데이터를 커널 영역 안의 버퍼로 저장한다. 그 후 모든 파일 데이터가 커널 안의 버퍼로 복사되면
JVM(프로세스) 안의 버퍼로 복사를 시작한다.
이 과정에서 두가지 비효율적인 부분이 존재한다.
• 커널 영역 버퍼에서 프로세스 영역 안의 버퍼로 데이터를 복사한다는 점
(커널 영역의 버퍼에 저장된 데이터를 직접 사용한다면 시간도 단축, 복사 대상인 데이터의 가비지 컬렉션도 필요 없어 진다, 또한
소중한 CPU 자원도 좀더 효율적으로 사용할 수 있게 된다.)
• 디스크 컨트롤러에서 커널 영역의 버퍼로 데이터를 복사하는 동안 프로세스 영역은 블록킹 된다는 점
18
자바 I/O와 NIO의 비교

Ⅱ. TCP/IP의 이해

IO 향상을 위한 운영체제 수준의 기술
대 다수의 운영체제들은 IO의 향상을 위해 많은 기능을 제공한다. NIO는 이러한 기능들을 사용함으로써
기존의 IO에 비해 많은 성능향상을 이뤄냈다.
구분

설명

버퍼

Scatter/Gather

Scatter/Gat

메모리 맵 파

her

자바 프로그램 안에 버퍼 세개를 만들어 사용한다면, 만약 동시에 이 각각의 버퍼에
데이터를 쓰거나 읽게되면, 어쩔 수 없이 시스템 콜을 세 번 호출 해서 각각의 버퍼에
데이터를 읽거나 쓰게 된다.
그러나 Scatter/Gather를 사용하면 시스템 콜을 한 번만 호출한다. 대신에 시스템 콜
을 한번 호출할 때마다 사용할 버퍼의 주소 목록을 넘겨줌으로서, 운영체제에서는
최적화된 로직을 사용해서 주어진 버퍼들로 부터 순차적으로 데이터를 읽거나 쓴다.

가상 메모리

가상 메모리는 프로그램이 사용할 수 있는 주소 공간을 늘이기 위해 운영체제에서
지원하는 기술이다. 가상메모리는 사용하면 두가지 장점이 있는데, 실제 물리적 메
모리 크기 보다 큰 가상 메모리 공간을 사용할 수 있다는 점, 여러 개의 가상 주소가
하나의 물리적 메모리 주소를 참조함으로써 메모리를 효율적으로 사용할 수 있다는
점.

메모리 맵 파일

가상 메모리

버퍼를 간단하게 설명하면 효율적으로 데이터를 전달하기 위한 객체다. 데이터를 한
개씩 여러 번 반복적으로 전달하는 것 보다는 중간에 버퍼를 두고 그 버퍼에 데이터
를 모아 한 번에 전달하는 것이 훨씬 효율적이다. 그렇기 때문에 데이터를 전송하는
곳에서는 대부분 버퍼를 기본적으로 사용한다.

프로그램 수행중 파일을 읽고 쓰는 작업이 빈번할 경우, 그때마다 매번 값비싼 시스
템 콜과 더불어 불필요한 커널 영역과 유저 영역 버퍼 간의 복사가 이루어질 것이다.
그러면 가비지 컬렉션도 빈번하게 발생하게 될텐데 이런 문제점을 해결하려고 운영
체제에서 지워하는 것이 Memory-mapped IO다.
Memory-mapped IO는 파일시스템의 페이지들과 유저 영역의 버퍼를 가상메모리로
매핑시킨다.
사용시 장점은, 프로세스가 파일 데이터를 메모리로서 바라 보기 때문에 read(),
write() 시스템 콜을 할 필요가 없다는 점, 매우 큰 파일을 복사하기 위해 많은 양의 메
모리를 소비하지 않아도 된다는 점이다.

파일 락

파일 락은 한 프로세스가 어떤 파일에 락을 획득했을 때, 다른 프로세스가 그 파일로
동시에 접근하는 것을 막거나 또는 접근하는 방식에 제한을 두는 것이다. 파일 락은
크게 공유락과 배타락이 있다. 일반적으로 공유 락은 읽기 작업, 배타락은 쓰기 작업
에 사용된다. 데이터 동기화 문제 때문에 사용!

일

IO향상을 위
한 운영체제
수준의 기술

버퍼

파일 락

19
자바 I/O와 NIO의 비교

Ⅱ. TCP/IP의 이해

자바 NIO의 변화
자바의 포인터 버퍼 도입
•커널에 의해 관리되는 시스템 메모리를 직접 사용할 수 있는 Buffer 클래스 도입

네이티브 IO 서비스를 제공해주는 채널 도입
•기존의 스트림은 단방향 이었다.(읽거나 쓰는 한가지만 가능)
•NIO에서는 스트림의 향상된 버전인 채널을 도입
채널은 스트림을 읽거나 쓰는 단방향에서부터, 읽고 쓰는 양방향 통신이 가능한 세 가지 형식이 존재한다. 또한 운영체제에서 제공해주는 다양한
네이티브 IO 서비스들을 이용할 수 있게 해준다.
•버퍼가 시스템 메모리에 로드되면 운영체제에서 지원하는 다양한 기능들을 채널을 통해 사용

셀렉터 도입
•기존의 자바 네트워크 프로그래밍의 한계
클라이언트 하나당 스레드 하나를 생성해서 처리해야함.(사용자가 늘어나면 스레드가 많이 생성됨으로 인해 성능 급격히 저하)
•단 하나의 스레드로 동시에 많은 IO 채널들을 효율적으로 관리할 수 있게 해줌
•셀렉터 처리방식
클라이언트의 모든 요청을 우선 앞단의 큐에 저장하고 큐를 모니터링 하는 스레드에 이벤트를 보낸다.
큐를 모니터링하는 스레드는 큐에 저장된 요청의 방향을 분석하여 적절히 프로세스 로직으로 보내주어 처리한다

20
감사합니다.

21

More Related Content

What's hot

Overview of Spanning Tree Protocol
Overview of Spanning Tree ProtocolOverview of Spanning Tree Protocol
Overview of Spanning Tree Protocol
Arash Foroughi
 
Tutorial: IPv6-only transition with demo
Tutorial: IPv6-only transition with demoTutorial: IPv6-only transition with demo
Tutorial: IPv6-only transition with demo
APNIC
 
Building DataCenter networks with VXLAN BGP-EVPN
Building DataCenter networks with VXLAN BGP-EVPNBuilding DataCenter networks with VXLAN BGP-EVPN
Building DataCenter networks with VXLAN BGP-EVPN
Cisco Canada
 
IMS - IP Multimedia Subsystem
IMS - IP Multimedia SubsystemIMS - IP Multimedia Subsystem
IMS - IP Multimedia Subsystem
Frederico Madeira
 
Netfilter: Making large iptables rulesets scale
Netfilter: Making large iptables rulesets scaleNetfilter: Making large iptables rulesets scale
Netfilter: Making large iptables rulesets scale
brouer
 
Faster packet processing in Linux: XDP
Faster packet processing in Linux: XDPFaster packet processing in Linux: XDP
Faster packet processing in Linux: XDP
Daniel T. Lee
 
ACI Netflow 구성 가이드
ACI Netflow 구성 가이드ACI Netflow 구성 가이드
ACI Netflow 구성 가이드
Woo Hyung Choi
 
Internet Protocol Version 4
Internet Protocol Version 4Internet Protocol Version 4
Internet Protocol Version 4
Purushottam Kamble
 
MPLS
MPLSMPLS
Wireshark
WiresharkWireshark
Wireshark
Vijay kumar
 
MPLS-TP (MPLS Transport Profile)
MPLS-TP (MPLS Transport Profile)MPLS-TP (MPLS Transport Profile)
MPLS-TP (MPLS Transport Profile)
Shivlu Jain
 
ACI MultiPod Config Guide
ACI MultiPod Config GuideACI MultiPod Config Guide
ACI MultiPod Config Guide
Woo Hyung Choi
 
BGP Multihoming Techniques
BGP Multihoming TechniquesBGP Multihoming Techniques
BGP Multihoming Techniques
APNIC
 
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RCThe Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
Thomas Graf
 
CISCO Virtual Private LAN Service (VPLS) Technical Deployment Overview
CISCO Virtual Private LAN Service (VPLS) Technical Deployment OverviewCISCO Virtual Private LAN Service (VPLS) Technical Deployment Overview
CISCO Virtual Private LAN Service (VPLS) Technical Deployment OverviewAmeen Wayok
 
Carrier Ethernet
Carrier EthernetCarrier Ethernet
Carrier Ethernet
Azhar Khuwaja
 
Access control list [1]
Access control list [1]Access control list [1]
Access control list [1]
Summit Bisht
 
Netmanias L2,L3 Training (1) L2 Ethernet
Netmanias L2,L3 Training (1) L2 EthernetNetmanias L2,L3 Training (1) L2 Ethernet
Netmanias L2,L3 Training (1) L2 Ethernet
Chris Changmo Yoo
 
Understanding stp-rstp-convergence
Understanding stp-rstp-convergenceUnderstanding stp-rstp-convergence
Understanding stp-rstp-convergence
Hazhir Yadegari
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
Takaaki Hoyo
 

What's hot (20)

Overview of Spanning Tree Protocol
Overview of Spanning Tree ProtocolOverview of Spanning Tree Protocol
Overview of Spanning Tree Protocol
 
Tutorial: IPv6-only transition with demo
Tutorial: IPv6-only transition with demoTutorial: IPv6-only transition with demo
Tutorial: IPv6-only transition with demo
 
Building DataCenter networks with VXLAN BGP-EVPN
Building DataCenter networks with VXLAN BGP-EVPNBuilding DataCenter networks with VXLAN BGP-EVPN
Building DataCenter networks with VXLAN BGP-EVPN
 
IMS - IP Multimedia Subsystem
IMS - IP Multimedia SubsystemIMS - IP Multimedia Subsystem
IMS - IP Multimedia Subsystem
 
Netfilter: Making large iptables rulesets scale
Netfilter: Making large iptables rulesets scaleNetfilter: Making large iptables rulesets scale
Netfilter: Making large iptables rulesets scale
 
Faster packet processing in Linux: XDP
Faster packet processing in Linux: XDPFaster packet processing in Linux: XDP
Faster packet processing in Linux: XDP
 
ACI Netflow 구성 가이드
ACI Netflow 구성 가이드ACI Netflow 구성 가이드
ACI Netflow 구성 가이드
 
Internet Protocol Version 4
Internet Protocol Version 4Internet Protocol Version 4
Internet Protocol Version 4
 
MPLS
MPLSMPLS
MPLS
 
Wireshark
WiresharkWireshark
Wireshark
 
MPLS-TP (MPLS Transport Profile)
MPLS-TP (MPLS Transport Profile)MPLS-TP (MPLS Transport Profile)
MPLS-TP (MPLS Transport Profile)
 
ACI MultiPod Config Guide
ACI MultiPod Config GuideACI MultiPod Config Guide
ACI MultiPod Config Guide
 
BGP Multihoming Techniques
BGP Multihoming TechniquesBGP Multihoming Techniques
BGP Multihoming Techniques
 
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RCThe Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
 
CISCO Virtual Private LAN Service (VPLS) Technical Deployment Overview
CISCO Virtual Private LAN Service (VPLS) Technical Deployment OverviewCISCO Virtual Private LAN Service (VPLS) Technical Deployment Overview
CISCO Virtual Private LAN Service (VPLS) Technical Deployment Overview
 
Carrier Ethernet
Carrier EthernetCarrier Ethernet
Carrier Ethernet
 
Access control list [1]
Access control list [1]Access control list [1]
Access control list [1]
 
Netmanias L2,L3 Training (1) L2 Ethernet
Netmanias L2,L3 Training (1) L2 EthernetNetmanias L2,L3 Training (1) L2 Ethernet
Netmanias L2,L3 Training (1) L2 Ethernet
 
Understanding stp-rstp-convergence
Understanding stp-rstp-convergenceUnderstanding stp-rstp-convergence
Understanding stp-rstp-convergence
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
 

Similar to TCP/IP 발표자료 - 김연수

소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약
세빈 정
 
TCP 연결 과정_Wh apm
TCP 연결 과정_Wh apmTCP 연결 과정_Wh apm
TCP 연결 과정_Wh apm
엑셈
 
Cse342 chapter 04
Cse342 chapter 04Cse342 chapter 04
Cse342 chapter 04
Jinil Nam
 
스트리밍 프로토콜
스트리밍 프로토콜스트리밍 프로토콜
스트리밍 프로토콜
greenday96
 
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]지환 김
 
TCP echo 서버 및 클라이언트 예제 스터디
TCP echo 서버 및 클라이언트 예제 스터디TCP echo 서버 및 클라이언트 예제 스터디
TCP echo 서버 및 클라이언트 예제 스터디quxn6
 
컴퓨터공학 스터디 W4 발표: TCP/UDP
컴퓨터공학 스터디 W4 발표: TCP/UDP컴퓨터공학 스터디 W4 발표: TCP/UDP
컴퓨터공학 스터디 W4 발표: TCP/UDP
ssuser91b87c
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
Sung-jae Park
 
뇌자T 1.네트워크와 tcpip
뇌자T   1.네트워크와 tcpip뇌자T   1.네트워크와 tcpip
뇌자T 1.네트워크와 tcpipsj k
 
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Icmp Attak Against Tcp
Icmp Attak Against TcpIcmp Attak Against Tcp
Icmp Attak Against Tcpxyzlee
 
Quality of Service
Quality of ServiceQuality of Service
Quality of Service
상봉 이
 
초보자를 위한 네트워크/VLAN 기초
초보자를 위한 네트워크/VLAN 기초초보자를 위한 네트워크/VLAN 기초
초보자를 위한 네트워크/VLAN 기초
Open Source Consulting
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVA
cooddy
 
Network virtualization for the better understanding of Data Center Network
Network virtualization for the better understanding of Data Center NetworkNetwork virtualization for the better understanding of Data Center Network
Network virtualization for the better understanding of Data Center Network
Inho Kang
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기
Tae Young Lee
 
리눅스 소켓 프로그래밍 기초
리눅스 소켓 프로그래밍 기초리눅스 소켓 프로그래밍 기초
리눅스 소켓 프로그래밍 기초
Yu Yongwoo
 
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료choi kyumin
 

Similar to TCP/IP 발표자료 - 김연수 (20)

소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약
 
TCP 연결 과정_Wh apm
TCP 연결 과정_Wh apmTCP 연결 과정_Wh apm
TCP 연결 과정_Wh apm
 
Cse342 chapter 04
Cse342 chapter 04Cse342 chapter 04
Cse342 chapter 04
 
스트리밍 프로토콜
스트리밍 프로토콜스트리밍 프로토콜
스트리밍 프로토콜
 
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
 
TCP echo 서버 및 클라이언트 예제 스터디
TCP echo 서버 및 클라이언트 예제 스터디TCP echo 서버 및 클라이언트 예제 스터디
TCP echo 서버 및 클라이언트 예제 스터디
 
컴퓨터공학 스터디 W4 발표: TCP/UDP
컴퓨터공학 스터디 W4 발표: TCP/UDP컴퓨터공학 스터디 W4 발표: TCP/UDP
컴퓨터공학 스터디 W4 발표: TCP/UDP
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 
뇌자T 1.네트워크와 tcpip
뇌자T   1.네트워크와 tcpip뇌자T   1.네트워크와 tcpip
뇌자T 1.네트워크와 tcpip
 
퀴즈요약
퀴즈요약퀴즈요약
퀴즈요약
 
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
 
Icmp Attak Against Tcp
Icmp Attak Against TcpIcmp Attak Against Tcp
Icmp Attak Against Tcp
 
Quality of Service
Quality of ServiceQuality of Service
Quality of Service
 
초보자를 위한 네트워크/VLAN 기초
초보자를 위한 네트워크/VLAN 기초초보자를 위한 네트워크/VLAN 기초
초보자를 위한 네트워크/VLAN 기초
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVA
 
Network virtualization for the better understanding of Data Center Network
Network virtualization for the better understanding of Data Center NetworkNetwork virtualization for the better understanding of Data Center Network
Network virtualization for the better understanding of Data Center Network
 
Python으로 채팅 구현하기
Python으로 채팅 구현하기Python으로 채팅 구현하기
Python으로 채팅 구현하기
 
리눅스 소켓 프로그래밍 기초
리눅스 소켓 프로그래밍 기초리눅스 소켓 프로그래밍 기초
리눅스 소켓 프로그래밍 기초
 
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
 
L4교육자료
L4교육자료L4교육자료
L4교육자료
 

More from Yeon Soo Kim

Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit Testing
Yeon Soo Kim
 
프로그래머로 사는법
프로그래머로 사는법프로그래머로 사는법
프로그래머로 사는법
Yeon Soo Kim
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
Yeon Soo Kim
 
그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수
Yeon Soo Kim
 
HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수
Yeon Soo Kim
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
Yeon Soo Kim
 
Open API 발표자료 - 김연수
Open API 발표자료 - 김연수Open API 발표자료 - 김연수
Open API 발표자료 - 김연수
Yeon Soo Kim
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수
Yeon Soo Kim
 

More from Yeon Soo Kim (8)

Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit Testing
 
프로그래머로 사는법
프로그래머로 사는법프로그래머로 사는법
프로그래머로 사는법
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수그루비 소개 발표자료 - 김연수
그루비 소개 발표자료 - 김연수
 
HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수HTTP 발표자료 - 김연수
HTTP 발표자료 - 김연수
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
 
Open API 발표자료 - 김연수
Open API 발표자료 - 김연수Open API 발표자료 - 김연수
Open API 발표자료 - 김연수
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수
 

TCP/IP 발표자료 - 김연수

  • 2. Contents Table Ⅰ. 소켓의 이해 Ⅲ. 자바 I/O와 NIO의 비교 1. 소켓이란?(개요, 타입) 1. 자바 I/O와 NIO의 비교 2. 인터넷 주소 체계 3. 소켓 생성 및 연결 4. 바이트 순서 5. 소켓 옵션 Ⅱ. TCP/IP의 이해 1. TCP/IP란?(개요, 헤더 등) 2. TCP/IP 4계층의 데이터 전송 3. TCP의 내부 구조 2
  • 3. Ⅰ. 소켓의 이해 1. 소켓이란? 2. 인터넷 주소 체계 3. 소켓 생성 및 연결 4. 바이트 순서 5. 소켓 옵션 3
  • 4. 소켓이란? I. 소켓의 이해 소켓이란? 인터넷 소켓(Internet socket, socket' 혹은 network socket 라고 부르기도 한다)은 네트워크로 연결되어 있 는 컴퓨터의 통신의 접점에 위치한 통신 객체다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다. 소켓은 RFC 147에 기술사항이 정의 되어 있다. TCP UDP • 연결형 프로토콜 • 비 연결형 프로토콜 - 연결이 성공해야 통신 가능 - 연결 없이 통신 가능 • 데이터 경계를 구분 하지 않음 • 데이터 경계를 구분함 - 바이트 스트림(byte-stream) 서비스 - 데이터 그램(datagram) 서비스 • 신뢰성 있는 데이터 전송 • 비 신뢰적인 데이터 전송 - 데이터를 재전송함 - 데이터를 재전송하지 않음 • 1 대 1(unicast) • 1 대 1(unicast) 1 대 다(broadcast) 다 대 다 통신(multicast) 4
  • 5. 인터넷 주소 체계 I. 소켓의 이해 인터넷 주소 체계 IP 주소란, 인터넷상에 존재하는 호스트들을 구분하기 위한 32비트 주소 체계를 의미한다. 4바이트 IP 주 소는 네트워크 주소와 호스트 주소로 나뉘며, 주소의 형태에 따라 A, B, C, D, E 클래스로 분류할 수 있다. IPv4는 32Bit 이고, IPv6는 128Bit로 구성되어 있다. class 1byte 1byte A 0 Network ID B 10 C 110 D 1110 1byte 1byte Host ID Host ID Network ID Host ID Network ID Multicast Address 5
  • 6. 소켓 생성 및 연결 I. 소켓의 이해 소켓 생성 및 연결 소켓으로 통신하기 위해서는 소켓을 생성 및 연결하여야 한다. Server side Client side 서버나 클라이언트나 통신을 위해서는 소켓을 생성해줘야 합니다.(TCP, UDP 선택) bind() : 소켓의 부착 socket() socket() bind() bind() 생성된 빈 소켓을 시스템에 부착하는 것은 소켓이 외부로의 연결을 만들 수 있는 접점을 가지게 되는 것이 됩니다. listen() : 서버측 연결 큐의 작성 클라이언트로부터 연결을 받기 위한 서버측 포트에 소켓이 부착됩니다. 바인드를 했지만 TCP는 연결 과정을 거쳐야 하기 때문에 연결큐가 필요합니다. 연결 큐를 만드는 작업이 listen을 호출하는 부분입니다. listen() accept() make connection recv(), send() exchange data finish connection close() passive close socket() : 소켓의 생성 connect() recv(), send() close() active close connect() : 서버로 연결 이제 서버측이 준비가 끝났으면, 클라이언트 측은 서버가 LISTEN 하고 있는 포트로 접속하기 위해서 connect()함수를 사용합니다. accept() : 클라이언트의 연결 수용 서버나 클라이언트나 통신을 위해서는 소켓을 생성해줘야 합니다.(TCP, UDP 선택) close(), shutdown() : 연결 종료 해당 프로세스 내에 연결된 소켓이 닫힌다(recv() 중인곳도 닫힘) 6
  • 7. 바이트 순서 I. 소켓의 이해 바이트 순서 바이트 순서는 시스템이 내부적으로 데이터를 표현하는 방법을 의미한다. 모든 시스템의 내부적인 데이터 표현 방식이 같은 것은 아니다. 크게 두가지 방법으로 나뉘는데, Big-Endian 방식과 Little Endian 방식이 있다. Big-Endian 방식(상위 바이트의 값이 메모리상에 먼저 표시되는 방법) 0x12 0x34 0x56 0x78 어떤 방식을 쓰느냐? 시스템의 CPU가 결정(호스트 바이트 순서) 메모리 번지수가 증가하는 방향 Little-Endian 방식(하위 바이트의 값이 메모리 상에 먼저 표시되는 방법) Big-Endian Little-Endian Motorola 68000 계열 0x78 0x56 0x34 Intel x86 계열 0x12 서로 다를 경우 바이트 순서 변환! 메모리 번지수가 증가하는 방향 7
  • 8. 소켓 옵션 I. 소켓의 이해 SO_SNDBUF     SO_REUSEADDR   SO_KEEPALIVE 소켓의 특성을 변경시켜 사용하여야 할 경우 소켓에 옵션을 설정하게 된다. set SO_RCVBUF SOL_SOCKET get   SO_BROADCAST 소켓 옵션 Protocol Level Option Name   • 입력 및 출력 버퍼의 크기 SO_DONTROUTE   • 데이터 전송 방식(TCP or UDP) SO_OOBINLINE   • TTL(Time to live) SO_ERROR  IP 패킷 내에 있는 값으로, 그 패킷 SO_TYPE  IP_TOS   IP_TTL   IP_MULTICAST_TTL   IP_MULTICAST_LOOP   IP_MULTICAST_IF   TCP_KEEPALIVE   TCP_NODELAY   TCP_MAXSEG   이 네트웍 내에 너무 오래 있어서 IPPROTO_IP 버려져야하는지의 여부를 라우터 에게 알려준다. IPPROTO_TCP 소켓의 다양한 옵션들 8
  • 9. 소켓 옵션 I. 소켓의 이해 소켓 옵션 • SOL_SOCKET : 소켓 레벨의 옵션을 변경 • IPPROTO_IP : IP 레벨의 옵션을 변경 • IPPROTO_TCP : TCP 레벨의 옵션을 변경 SOL_SOCKET 레벨의 옵션 옵션 설명 SO_BROADCAST 방송형 메시지 전송 허용(UDP) SO_DEBUG DEBUG 모드를 선택 SO_RESUSEADD R 주소 재사용 선택 SO_LINGER 소켓을 닫을 때 미 전송된 데이터가 시간만큼 기다렸다가 소켓을 닫음(TCP) SO_KEEPALIVE TCP의 Keep Alive 동작 선택(TCP) SO_OOBINLINE OOB 데이터를 일반데이터처럼 읽음 SO_RCVBUF 수신버퍼의 크기 변경 SO_SNDBUF 송신버퍼의 크기 변경 9
  • 10. 소켓 옵션 I. 소켓의 이해 소켓 옵션 IP_PROTO_IP 레벨의 옵션 옵션 설명 IP_TTL Time To Live 변경 IP_MULTICAST_TTL 멀티캐스트 데이터그램의 TTL 변경(UDP) IP_ADD_MEMBERSHIP 멀티캐스트 그룹에 가입(UDP) IP_DROP_MEMBERSH IP 멀티캐스트 그룹에서 탈퇴)UDP) IP_MULTICAST_LOOP 멀티캐스트 데이터그램의 loopback 허용 여부(UDP) IP_MULTICAST_IF 멀티캐스트 데이터그램 전송용 인터페이스 지정(UDP) IP_PROTO_TCP 레벨의 옵션 옵션 설명 TCP_KEEPALIVE Keep Alive 확인 메시지 전송 시간 지정 TCP_MAXSEG TCP의 MSS(최대 메시지 크기) 지정 (TCP) TCP_NODELAY Nagle 알고리즘의 선택(TCP) 10
  • 11. Ⅱ. TCP/IP의 이해 1. TCP/IP란? 2. TCP/IP 4계층의 데이터 전송 3. TCP의 내부구조 11
  • 12. TCP/IP란? Ⅱ. TCP/IP의 이해 TCP/IP란? 전송 제어 프로토콜(Transmission Control Protocol, TCP, 문화어: 전송조종규약)는 네트워크의 정보 전달 을 통제하는 프로토콜이다. 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF)의 RFC 793에 기술되어 있다. TCP는 IP 위에서 동작하는 프로토콜로 흔히 TCP/IP로 표기한다. 데이터의 전 달을 보증하고 보낸 순서대로 받게 해 준다. TCP는 패킷의 교환을 근간으로 하는 인터넷 프로토콜(IP, Internet Protocol)을 기반으로 작동한다. 패킷은 헤더와 바디로 구성된 바이트 단위의 짧은 신호이다. 헤더는 데이터의 수신처에 대한 정보가 들어가며 바디에 전달할 데이터가 실린다. 패킷은 회선이 혼잡할 경우 IP 프로토콜에서 폐기될 수 있기 때문에 다른 경로를 가진 두 개의 라우터를 통해 수신처에 전달된다. TCP는 패킷의 폐기로 인해 잘못된 명령이 전달되더라도 어플리케 이션으로부터 기반 패킷을 구성하여 폐기된 패킷을 다시 전달하도록 함으로써 네트워 크 혼잡에 의한 피해를 최대한 줄이도록 구성되어 있다. (bit) (source port) (destination port) (seq number) TCP 헤더 제어 플래그 플래그 설명 URG Uragent, 뒤의 uragent pointer 필드를 사용함 (긴급 데이터) ACK Acknowledgement, 앞의 ack number 필드를 사용함 (window size) PSH Push, 현재 세그먼트 데이터는 즉시 전달되 어야 함 (urgent pointer) RST Reset, 현재 연결을 재설정함 SYN Synchronization, 새로운 연결 설정 요구함 FIN Finish, 연결의 종료를 요구함 (ack number) (Len) (Reserved) (Checksum) (TCP options) 12
  • 13. TCP/IP 4계층에 의한 데이터 전송 Ⅱ. TCP/IP의 이해 TCP/IP 4계층에 의한 데이터 전송 실제로 TCP/IP 4계층 어떻게 데이터가 전송되는지 웹 방식을 토대로 알아본다. 1 Application Layer (Presentation Layer 포함) 2 Transport Layer (Session Layer 포함) 3 Internet Layer (Network Layer, Data Link Layer 포함) 4 Physical Layer 1 2 URL 입력을 통한 웹페이지 요청 3 인터넷 상에서 원하는 주소로 이동하기 위해 IP패킷으로 만듬 사용자의 요청 정보를 TCP 패킷으로 만듬 4 정보가 이더넷 카드로 보내지고 Internet 으로 나감 Internet으로 전송 되는 Flow 상세 설명 이더넷 카드는 TCP/IP 패킷을 바로 윗 계층(Internet Layer)로 보내는데, 여기에서 IP 패킷을 분석해서, 이 패킷에 어디에서 왔고 도착지가 어디인지를 판단한다. 그리하여 목적지가 자신이면 Transport Layer로 보내고, TCP 프로토콜을 사용하여, 메시지가 누락된게 있으면 다시 요청하고, 순서를 재조합하는 등 통신 메시지를 검사해서 이것을 다시 Application Layer로 보낸다. Application Layer 에서는 웹서버(IIS, Apache 같은)가 통신 메시지를 HTTP 프로토콜에 준하여, 검사를 하여 사용자가 요청한 웹페이지를 읽어들여, Transport 계층으로 보내게 된다. 웹페이지를 브라우저까지 전송하는 과정은 위의 정반대의 과정을 순차적으로 거치게 된다. 13
  • 14. TCP/IP 내부 구조 Ⅱ. TCP/IP의 이해 TCP/IP 내부 구조 TCP 기반의 소켓이 연결되어서 데이터를 송, 수신하고 종료되기까지 총 3단계를 거치게 된다. 그 단계를 자세히 보면 아래와 같다. 1] 첫 번째 단계 : 연결 설정 A B SYN SEQ: 1000, ACK: - SYN+ACK SEQ: 2000, ACK: 1001 ACK SEQ: 1001, ACK: 2001 1. 첫 번째(A가 B에게) : A가 B에게 전송할 데이터가 있으니, 연결을 하자는 의미로 SYN(synchronization) 패킷을 전송한다(SYN 안에는 SEQ와 ACK 정보가 들어 있고, 이 정보는 현재 보내는 패킷에 넘버를 부여해서 서로간의 데이터 수신 유무를 확인하는 데 사용 된다.) 2. 두 번째(B가 A에게) : 연결 준비가 다 되었다는 의미로 B는 A에게 SEQ 2000, ACK 1001이라는 패킷을 보내게 된다. ACK 1001은 “좀 전에 전송해준 SEQ가 1000인 패킷은 잘 받았으니 다음 번 데이터 전송 시에는 SEQ 넘버 1001를 보내달라” 라는 의미이다. 그리고 B도 A와 마찬가지로 수신 확인을 위해서 패킷에 SEQ 2000을 부여하고 있다. 이 패킷의 특징은 B도 ‘준비가 되었다’는 SYN의 의미도 지니지만, 이전에 A가 보낸 패킷의 확인 응답 기능도 지니고 있으므로 SYN+ACK(Acknowledgement) 메시지가 된다. 3. 세 번째(A가 B에게) : 마지막으로 전송하는 패킷은 다음의 의미를 지닌다. 좀 전에 보내준 패킷을 잘 받았으니 이제 데이터를 주고 받읍시다. A도 마지막으로 B에게 SEQ 2000인 패킷을 잘 받았다는 의미로 ACK 2001을 보내고 있다. * 서로간에 데이터를 주고 받을 수 있다는 것을 완벽히 확인하는데 세 번의 패킷 전송이 있었다. 따라서 이것을 가리켜 three-way handshaking이라 한다 14
  • 15. TCP/IP 내부 구조 Ⅱ. TCP/IP의 이해 TCP/IP 내부 구조 TCP 기반의 소켓이 연결되어서 데이터를 송, 수신하고 종료되기까지 총 3단계를 거치게 된다. 그 단계를 자세히 보면 아래와 같다. 2] 두 번째 단계 : 데이터 송/수신 A B SEQ : 1301, 100bytes ACK : 1401 Time out 1. A에서 B로 100바이트를 전송하면서 SEQ 1301을 전송한다. 따라서 다음번에 패킷을 전송할 때는 SEQ 1302가 아니라, 100바이트를 전송했으므로 SEQ 1401이 되어야 한다. 2. 또 다시 A가 B로 100바이트를 전송하면서 SEQ 1401을 전송해 준다. 그런데 중간에 소멸되고 말았다. 이러한 경우 A는 일정 시간이 지나도 ACK가 돌아 오지 않으면 재전송을 시작한다. 결국 B는 패킷을 수신하게 되고 ACK 1501을 전송한다. SEQ : 1401, 100bytes SEQ : 1401, 100bytes ACK : 1501 15
  • 16. TCP/IP 내부 구조 Ⅱ. TCP/IP의 이해 TCP/IP 내부 구조 TCP 기반의 소켓이 연결되어서 데이터를 송, 수신하고 종료되기까지 총 3단계를 거치게 된다. 그 단계를 자세히 보면 아래와 같다. 3] 세 번째 단계 : 연결 종료 A B FIN SEQ : 5000, ACK : - ACK SEQ : 7500, ACK : 5001 FIN SEQ : 7501, ACK : 5001 ACK TIME_WAIT SEQ : 5001, ACK : 7502 1. 첫 번째(A가 B에게) : 종료 요청 메시지를 담은 패킷을 전송한다. FIN(finish)이라 한다. 2. 두 번째(B가 A에게) : 패킷을 잘 받았다는 ACK를 보낸다. 3. 세 번째(B가 A에게) : 종료 해도 좋다는 FIN을 A에게 보낸다. 4. 네 번째(A가 B에게) : 최종적인 수신 응답 메시지 ACK를 전송한다. * 이렇게 종료 단계는 네 단계에 걸쳐서 진행되기 때문에 four-way handshaking이라 한다. ** TIME_WAIT : four-way handshaking 과정이 끝난 상태에서 A의 소켓이 바로 소멸되는 것이 아니라, TIME_WAIT 상태에 들어가게 된다. 반면에 B는 바로 연결이 종료되고 소켓이 소멸된다. 즉, 먼저 연결 종료를 요청할 경우 TIME_WAIT 상태를 거치게 된다. B에게서 FIN을 받고 마지막 ACK 전송 실패 시 재전송을 위해 TIME_WAIT 상태 존재. 이것은 SO_REUSEADDR 옵션을 사용해주면, TIME_WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 Port를 새로 시작하는 소켓에 할당해 주게 된다. 16
  • 17. Ⅲ. 자바 I/O와 NIO의 비교 1. 자바 I/O와 NIO의 비교 17
  • 18. 자바 I/O와 NIO의 비교 Ⅱ. TCP/IP의 이해 자바 I/O와 NIO의 비교 기존의 자바 IO는 블록킹 IO이므로 C나 C++의 IO에 비해 상당히 느렸었다. 그러나 JDK 1.4에서는 운영체 제 수준의 네이티브 기능을 적극적으로 활용하는 NIO가 도입되어, 자바 IO의 단점을 보완하였다. IO 흐름 유저 영역 프로세스 버퍼 커널 영역 read() DMA 버퍼 하드웨어 디스크 컨트롤러 디스크 유저 영역은 일반적인 프로세스들이 존재하는 제한된 권한을 갖는 영역이다. 유저 영역 안의 프로세스들은 하드웨어 장치나 다른 프로세스에 직접적으로 접근할 수 없기 때문이다. 커널 영역은 운영체제에 존재하는 영역으로서 하드웨어 장치에 직접적으로 접근하고 다른 프로세스를 제어할 수 있는 권한이 있다. 자바에서 파일 읽기를 시도하면 제일 먼저 커널에 명령을 전달한다. 커널은 시스템 콜(read())을 사용해서 디스크 컨트롤러가 물리적 디스크로부터 읽어온 파일 데이터를 커널 영역 안의 버퍼로 저장한다. 그 후 모든 파일 데이터가 커널 안의 버퍼로 복사되면 JVM(프로세스) 안의 버퍼로 복사를 시작한다. 이 과정에서 두가지 비효율적인 부분이 존재한다. • 커널 영역 버퍼에서 프로세스 영역 안의 버퍼로 데이터를 복사한다는 점 (커널 영역의 버퍼에 저장된 데이터를 직접 사용한다면 시간도 단축, 복사 대상인 데이터의 가비지 컬렉션도 필요 없어 진다, 또한 소중한 CPU 자원도 좀더 효율적으로 사용할 수 있게 된다.) • 디스크 컨트롤러에서 커널 영역의 버퍼로 데이터를 복사하는 동안 프로세스 영역은 블록킹 된다는 점 18
  • 19. 자바 I/O와 NIO의 비교 Ⅱ. TCP/IP의 이해 IO 향상을 위한 운영체제 수준의 기술 대 다수의 운영체제들은 IO의 향상을 위해 많은 기능을 제공한다. NIO는 이러한 기능들을 사용함으로써 기존의 IO에 비해 많은 성능향상을 이뤄냈다. 구분 설명 버퍼 Scatter/Gather Scatter/Gat 메모리 맵 파 her 자바 프로그램 안에 버퍼 세개를 만들어 사용한다면, 만약 동시에 이 각각의 버퍼에 데이터를 쓰거나 읽게되면, 어쩔 수 없이 시스템 콜을 세 번 호출 해서 각각의 버퍼에 데이터를 읽거나 쓰게 된다. 그러나 Scatter/Gather를 사용하면 시스템 콜을 한 번만 호출한다. 대신에 시스템 콜 을 한번 호출할 때마다 사용할 버퍼의 주소 목록을 넘겨줌으로서, 운영체제에서는 최적화된 로직을 사용해서 주어진 버퍼들로 부터 순차적으로 데이터를 읽거나 쓴다. 가상 메모리 가상 메모리는 프로그램이 사용할 수 있는 주소 공간을 늘이기 위해 운영체제에서 지원하는 기술이다. 가상메모리는 사용하면 두가지 장점이 있는데, 실제 물리적 메 모리 크기 보다 큰 가상 메모리 공간을 사용할 수 있다는 점, 여러 개의 가상 주소가 하나의 물리적 메모리 주소를 참조함으로써 메모리를 효율적으로 사용할 수 있다는 점. 메모리 맵 파일 가상 메모리 버퍼를 간단하게 설명하면 효율적으로 데이터를 전달하기 위한 객체다. 데이터를 한 개씩 여러 번 반복적으로 전달하는 것 보다는 중간에 버퍼를 두고 그 버퍼에 데이터 를 모아 한 번에 전달하는 것이 훨씬 효율적이다. 그렇기 때문에 데이터를 전송하는 곳에서는 대부분 버퍼를 기본적으로 사용한다. 프로그램 수행중 파일을 읽고 쓰는 작업이 빈번할 경우, 그때마다 매번 값비싼 시스 템 콜과 더불어 불필요한 커널 영역과 유저 영역 버퍼 간의 복사가 이루어질 것이다. 그러면 가비지 컬렉션도 빈번하게 발생하게 될텐데 이런 문제점을 해결하려고 운영 체제에서 지워하는 것이 Memory-mapped IO다. Memory-mapped IO는 파일시스템의 페이지들과 유저 영역의 버퍼를 가상메모리로 매핑시킨다. 사용시 장점은, 프로세스가 파일 데이터를 메모리로서 바라 보기 때문에 read(), write() 시스템 콜을 할 필요가 없다는 점, 매우 큰 파일을 복사하기 위해 많은 양의 메 모리를 소비하지 않아도 된다는 점이다. 파일 락 파일 락은 한 프로세스가 어떤 파일에 락을 획득했을 때, 다른 프로세스가 그 파일로 동시에 접근하는 것을 막거나 또는 접근하는 방식에 제한을 두는 것이다. 파일 락은 크게 공유락과 배타락이 있다. 일반적으로 공유 락은 읽기 작업, 배타락은 쓰기 작업 에 사용된다. 데이터 동기화 문제 때문에 사용! 일 IO향상을 위 한 운영체제 수준의 기술 버퍼 파일 락 19
  • 20. 자바 I/O와 NIO의 비교 Ⅱ. TCP/IP의 이해 자바 NIO의 변화 자바의 포인터 버퍼 도입 •커널에 의해 관리되는 시스템 메모리를 직접 사용할 수 있는 Buffer 클래스 도입 네이티브 IO 서비스를 제공해주는 채널 도입 •기존의 스트림은 단방향 이었다.(읽거나 쓰는 한가지만 가능) •NIO에서는 스트림의 향상된 버전인 채널을 도입 채널은 스트림을 읽거나 쓰는 단방향에서부터, 읽고 쓰는 양방향 통신이 가능한 세 가지 형식이 존재한다. 또한 운영체제에서 제공해주는 다양한 네이티브 IO 서비스들을 이용할 수 있게 해준다. •버퍼가 시스템 메모리에 로드되면 운영체제에서 지원하는 다양한 기능들을 채널을 통해 사용 셀렉터 도입 •기존의 자바 네트워크 프로그래밍의 한계 클라이언트 하나당 스레드 하나를 생성해서 처리해야함.(사용자가 늘어나면 스레드가 많이 생성됨으로 인해 성능 급격히 저하) •단 하나의 스레드로 동시에 많은 IO 채널들을 효율적으로 관리할 수 있게 해줌 •셀렉터 처리방식 클라이언트의 모든 요청을 우선 앞단의 큐에 저장하고 큐를 모니터링 하는 스레드에 이벤트를 보낸다. 큐를 모니터링하는 스레드는 큐에 저장된 요청의 방향을 분석하여 적절히 프로세스 로직으로 보내주어 처리한다 20