0-1의 데이터
를 주고받을 수 있어야 한다0-1
의 데이터는 수평선과 수직선이 있는 전자기파로 0~무한대의 주파수를 가진다encoding
, 아날로그 신호를 0과 1의 나열로 해석하는 decoding
하드웨어적
으로 구현되어있다switch
가 필요!!switch
와 switch
의 연결이 필요router
(공유기)를 사용해 스위치를 연결하면 서로 다른 네트워크 간에 전선으로 연결이 가능!! (router
와 router
를 계속해서 연결 가능)비트열
을 붙여서 해당 비트열을 통해 시작과 끝을 확인!! (framing)ip 주소
를 붙임패킷
이 생성패킷
을 전송패킷
을 열어 목적지 ip 주소를 확인하고 연결된 컴퓨터 중 해당 ip 주소가 있는지 확인inter-network
에서 목적지로 데이터를 전송하기 위해 ip 주소
로 길을 찾고 다음 라우터
에 데이터를 넘겨준다 (forwarding)port 번호
(하나의 컴퓨터에서 동시에 실행되는 프로세스들이 겹치지 않게 가져야하는 정수 번호)를 가짐port 번호
를 붙여서 보냄!!port 번호
를 사용해서 최종 목적지인 프로세스까지 데이터가 도달할 수 있게하는 모듈SSH
, TLS
가 있다TCP/IP 소켓 프로그래밍
: 전송 계층에서 제공하는 API를 활용해 통신 가능한 프로그램을 만드는 것HTTP
encoding
: status code 및 정보를 붙임decoding
: status code 및 정보를 빼고 데이터를 받음기존 TCP/IP
: 응용 계층, 전송 계층, 인터넷 계층, 링크 계층최신 TCP/IP
: 응용 계층, 전송 계층, 네트워크 계층, 데이터 링크 계층, 물리 계층port 번호
와 목적지 port 번호
를 가진다port 번호
만 존재ip 주소
와 목적지 ip 주소
를 가진다DNS 서버
에 해당 도메인의 ip 주소를 요청해서 받아온다DNS 서버
는 HTTP request와 비슷하게 도메인이 담긴 쿼리를 도메인에 보내 도메인 서버가 ip 주소를 리턴!MAC
ARP
(주소 해석 프로토콜)를 사용해 내 컴퓨터의 ip 주소를 MAC 주소
로 변환SYN
패킷 전송SYN 패킷
과 ACK 패킷
전송ACK 패킷
전송SYN(Synchronization)
: 연결 요청, 세션을 설정하는데 사용되며 초기 시퀀스 번호를 전송ACK(Acknowledgement)
: 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함해서 전송 (받았다는 신호)3-way handshake
가 TCP의 연결을 초기화할때 사용한다면 4-way handshake
는 세션을 종료하기 위해 사용FIN
flag를 전송 - 클라이언트는 FIN-WAIT
상태가 된다FIN
flag를 받고 ACK
확인 메시지를 전송 - 서버는 통신이 끝날때까지 기다리는 CLOSE-WAIT
상태, 클라이언트는 FIN-WAIT2
상태가 된다FIN
flag를 전송 - 서버는 LAST-ACK
상태가 된다ACK
를 전송 - 클라이언트는 FIN-WAIT2
→ TIME-WAIT
로 변경된다SYN
(연결 요청 플래그) : TCP에서 세션을 성립할때 가장 먼저 전송하는 패킷으로 시퀀스 번호를 임의적으로 설정ACK
(응답 플래그) : 상대방으로부터 패킷을 받았음을 알려주는 패킷FIN
(연결 종료 플래그) : 세션 연결을 종료시킬때 사용되며 더 이상 전송할 데이터가 없음을 알려주는 플래그RST
(연결 재설정 플래그) : 리셋을 하는 과정으로 양방향에서 동시에 일어나는 중단 작업 - 비정상적인 세션 연결 끊기PSH
(밀어넣기) : 버퍼가 채워지기를 기다리지 않고 데이터를 전달URG
(긴급 데이터 플래그) : 전송하는 데이터 중 긴급하게 전달할 내용이 있는 경우 사용CLOSE
: 연결이 수립되기 전 상태ESTABLISHED
: 연결이 수립된 상태로 데이터를 교환할 수 있는 상태FIN-WAIT
: close를 호출한 측의 소켓이 진입하는 상태로 FIN
을 전송 후 상대의 ACK
나 FIN
을 기다리는 상태FIN-WAIT2
: 자신이 보낸 FIN
에 대한 ACK
를 받았고 상대의 FIN
을 기다리는 상태CLOSE-WAIT
: close를 받은 후의 상태 - ACK
전송LAST-ACK
: CLOSE-WAIT
상태를 처리 후 자신의 FIN
요청에 대한 ACK
를 기다리는 상태CLOSING
: 상대방의 FIN
에 ACK
를 보냈지만 자신의 FIN
에 대한 ACK
를 못 받은 상태TIME-WAIT
: 모든 FIN
에 대한 ACK
를 받고 연결 종료가 완료된 상태, 새 연결과 겹치지 않도록 일정 시간동안 기다린 후 CLOSED
24bit
의 버퍼를 생성하고 위쪽부터 바이트 데이터를 넣은 뒤 6bit
단위로 잘라 Base64 테이블의 아스키 문자로 변환Universal Unique Identifier
로 네트워크 상에 존재하는 개체들을 식별하고 구별하기 위해 개발 주체가 스스로 이름을 지어 고유성을 충족시킬 수 있는 방법v1
: 타임스탬프(시간) 기준v3
: MD5 해시 기준v4
: 랜덤값 기반v5
: SHA-1 해시 기준참고자료
https://korean-otter.tistory.com/entry/OSI-7계층
https://mindnet.tistory.com/entry/네트워크-쉽게-이해하기-22편-TCP-3-WayHandshake-4-WayHandshake
https://velog.io/@averycode/네트워크-TCPUDP와-3-Way-Handshake4-Way-Handshake
https://sh-safer.tistory.com/146
https://seongonion.tistory.com/74
https://devuna.tistory.com/41#recentComments
https://velog.io/@koreanhole/UUID가-겹치면-어쩌지