Jeomxon's Tech Note

2024.01.30.(화) 6회 차 모각코 정리 본문

Mogaco/2023동계

2024.01.30.(화) 6회 차 모각코 정리

저문(jeomxon) 2024. 1. 30. 20:21

1. 접속의 의미

접속은 서버의 IP 주소나 포트 번호를 프로토콜 스택에 알리는 동작

클라이언트에서 IP 주소와 포트 번호를 서버 측에 전달함으로써 서버의 프로토콜 스택이 클라이언트의 정보를 가질 수 있도록 하는 것

  • 접속 동작의 순서
  1. 통신 상대와의 사이에서 제어 정보를 주고받아 소켓에 필요한 정보를 기록하고 데이터 송, 수신이 가능한 상태로 만드는 것

데이터 송, 수신 동작을 실행할 때 송, 수신하는 데이터를 일시적으로 저장하는 메모리 영역이 필요한데 이 영역을 버퍼 메모리라고 함

2. 맨 앞부분에 제어 정보를 기록한 헤더를 배치한다

제어 정보

  1. 클라이언트와 서버가 서로 연락을 절충하기 위해 주고받는 제어 정보

이더넷이나 IP의 제어 정보, TCP의 제어 정보가 패킷 내부에서의 헤더로 기록되어 전달됨

데이터 송, 수신이 이뤄지지 않은 접속 동작의 단계에서는 패킷에서 데이터 조각이 없고, 헤더로만 이루어져있음

  1. 소켓에 기록하여 프로토콜 스택 동작을 제어하기 위한 정보

소켓의 제어 정보는 프로토콜 스택의 프로그램과 일체화

IP 주소나 포트 번호 외에는 프로토콜 스택이 필요로 하는 정보에 따라 프로토콜 스택을 만드는 사람에 따라 달라짐

3. 접속 동작의 실제

connect(<디스크립터>, <서버 측의 IP 주소와 포트 번호>, …)

  1. 위의 함수에 파라미터로 IP 주소와 포트 번호를 쓰면 명령이 프로토콜 스택의 TCP 담당 부분에 전달됨
  2. TCP 담당 부분은 IP 주소로 표시된 상대, 즉 서버의 TCP 담당 부분과의 사이에 제어 정보를 주고받음
    1. 데이터 송, 수신 동작의 개시를 나타내는 제어 정보를 기록한 헤더를 만듦
    2. 제어 정보에서 송신처, 수신처의 포트 번호를 통해 클라이언트와 서버 측의 소켓을 지정할 수 있음
    3. 컨트롤 비트인 SYN의 비트를 1로 변경하여 접속
  3. TCP 헤더를 IP 담당 부분에 건네주어 송신 의뢰 → IP 담당 부분은 패킷 송신
  4. 서버의 IP 담당 부분이 수신후 TCP 담당 부분에 패킷 전달
  5. 받은 패킷에서 TCP 헤더를 조사하여 기록되어있는 수신처 포트 번호에 해당하는 소켓을 찾음
    1. 패킷에서 수신처 포트 번호와 같은 번호가 기록된 것이 해당하는 소켓
  6. 소켓에 필요한 정보를 기록한 후 접속 진행 중인 상태가 됨
  7. 앞선 과정이 끝나면 서버의 TCP 담당 부분은 응답을 돌려보냄
    1. 서버는 클라이언트와 마찬가지로 송신처와 수신처의 포트 번호나 SYN 비트 등을 설정한 TCP 헤더를 만듦
    2. ACK 비트를 1로 만듦(패킷을 받을 것을 알리기 위함)
    3. TCP 헤더를 IP 담당 부분으로 건네주어 클라이언트에게 반송 의뢰
  8. 클라이언트 → IP 담당 부분 → TCP 담당 부분으로 도달, TCP 헤더를 조사하여 접속 동작이 성공했는지 확인(SYN가 1인지 확인)
  9. 소켓에 서버의 IP 주소, 포트 번호 등과 함께 접속 완료를 나타내는 제어 정보 기록
  10. 클라이언트는 패킷이 도착한 것을 서버에 알리기 위해 ACK 비트를 1로 만든 TCP 헤더를 반송, 이것이 서버에 도착하면 접속 완료

이렇게 연결이 완료된 것을 커넥션이라고 함

커넥션은 close를 호출하여 연결을 끊을 때 까지 계속 존재