아틴
Atin
아틴
전체 방문자
오늘
어제
  • 분류 전체보기 (460)
    • Devlopment (246)
      • 정리 글 (20)
      • MicroServices (0)
      • Reactive, Concurrenc.. (12)
      • Java (44)
      • Spring (20)
      • C,C++,Ruby,Python (52)
      • Mobile (39)
      • Web (35)
      • Tip & Info (14)
      • Unit Test (7)
    • Infra (44)
      • OS (21)
      • RDBMS (13)
      • NoSQL&Cache (5)
      • AWS (4)
    • Computer Science (11)
    • Etc (156)

블로그 메뉴

  • Home
  • Guestbook

공지사항

인기 글

태그

  • 정읍
  • Java
  • Python
  • 자바
  • 여행
  • Ruby on Rails
  • Dungeons & Dragons
  • 아이폰
  • Linux
  • 던젼 앤 드래곤즈
  • Android
  • 전라도
  • mysql
  • jsp
  • TRPG
  • 해킨토시
  • 안드로이드
  • C
  • javascript
  • CSS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아틴

Atin

TCP 3 Way-Handshake & 4 Way-Handshake
Computer Science

TCP 3 Way-Handshake & 4 Way-Handshake

2017. 9. 30. 06:11
반응형


TCP 3-way hand shaking

TCP/IP프로토콜 통신을 하는 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방과 세션을 수립하는 과정

  1. Client > Server : TCP SYN         Server : LISTEN, Client : SYN_SENT
  2. Server > Client : TCP SYN+ACK Server : SYN_RECEIVED
  3. Client > Server : TCP ACK         Server, Client : ESTABLISHED


     SYN : 'synchronize sequence numbers'

     ACK : 'acknowledgment'


출처 : [1] https://notes.shichao.io/unp/ch2/


TCP 4-way Handshaking

세션을 종류하기 위해 수행되는 절차 (FIN, ACK, FIN, ACK 주고받음)

  1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송
  2. 서버는 확인메시지를 보내고 자신의 통신이 끝날때까지 대기 (TIME_WAIT)
  3. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 전송
  4. 클라이언트는 확인했다는 메시지 전송


출처 : [1] https://notes.shichao.io/unp/ch2/



TCP State

  • CLOSED 

    • 연결되지 않은 상태

    • 소켓의 초기 시작 상태

    • 연결이 종료됨 (연결 없음)


  • SYN-SENT

    • SYN 세그먼트를 보내고, ACK를 기다리는 상태


  • LISTEN
    • SYN 세그먼트를 기다리며, 대기중인 상태
    • 서버가 SYN 세그먼트를 수신하면, SYN+ACK 세그먼트를 송신하고는 이후, SYN-RECEIVED 상태로 전이됨


  • SYN-RECEIVED

    • SYN 세그먼트(연결 요청)을 받고, 자신의 SYN(즉, SYN+ACK 세그먼트)으로 응답한 상태 

    • 이때부터, 상대방에서 ACK 세그먼트를 기다리는 상태

    • 상대방의 ACK 세그먼트가 수신되면 ESTABLISHED 상태로 전이됨


  • ESTABLISHED

    • 연결 성립 상태

    • 두 종단 간에 양방향 데이터 전송이 가능

    • 종단 각각 자신 및 상대 ISN(초기순서번호)를 알게 됨

    • 양단 간에 TCP 옵션에 의해 부가적인 정보가 전달됨


  • CLOSE-WAIT

    • TCP가 어플리케이션 종료를 기다림

    • 이 상태에서 계속 데이터를 상대에게 보낼 수 있음


  • LAST-ACK

    • 서버는 자신이 송신한 FIN 세그먼트에 대한 ACK 세그먼트를 기다림


  • FIN-WAIT-1

    • 자신이 보낸 FIN 세그먼트에 대한 ACK를 기다리고, 또한 상대측 FIN을 기다림

    • 자신은 더이상 데이터를 보낼 수 없지만, 상대측으로부터 오는 데이터는 계속 가능 상태


  • FIN-WAIT-2

    • FIN 세그먼트를 송신하고, 상대측은 이에 대한 ACK를 송신


  • Closing

    • 상대로부터 FIN 세그먼트를 받고 ACK를 보냈지만, 자신의 FIN 세그먼트에 대한 ACK는 받지못함


  • TIME-WAIT

    • 최대 세그먼트 수명(MSL,Maximum Segment Lifetime)의 2배를 기다림

    • 지정된 시간이 지나면, Closed 상태로 전이됨

    • Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정






Reference

[1] https://notes.shichao.io/unp/ch2/

반응형
저작자표시 비영리 변경금지 (새창열림)

'Computer Science' 카테고리의 다른 글

JVM 메모리 구조 (JVM Memory structure)  (0) 2017.09.30
DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성  (0) 2017.09.30
OOP(객체 지향 프로그래밍) 5원칙 및 특성  (0) 2017.09.30
Java 자료구조 비교  (0) 2017.09.30
TCP vs UDP  (0) 2017.09.30
OSI 7 계층 (OSI 7 Layer)  (0) 2017.09.29
프로세스와 스레드(Process vs Thread)  (0) 2017.09.29
64비트와 32비트의 차이  (0) 2017.09.29
퀵 정렬, 퀵 소트(Quick Sort)  (0) 2017.09.21
계수정렬, 카운팅 소트(Counting Sort)  (0) 2017.09.21
    'Computer Science' 카테고리의 다른 글
    • Java 자료구조 비교
    • TCP vs UDP
    • OSI 7 계층 (OSI 7 Layer)
    • 프로세스와 스레드(Process vs Thread)
    아틴
    아틴

    티스토리툴바