본문 바로가기

728x90
반응형

전체 글

(224)
tcp/ip - 07 소켓의 종료 tcp 프로토콜에서는 소켓의 종료과정이 명확하게 이루어져야 한다. 그렇지 않으면 양방향 통신을 하고 있는 두 호스트 사이에서 데이터의 손실등의 문제가 발생할 수 있다. 리눅스의 close함수는 소켓의 완전 종료를 의미하는데, 이렇게 되면 데이터 송수신이 다 완료되지 않았는데 소켓이 먼저 닫혀버리는 상황이 발생 할 수 있다. -> 데이터 소멸 위험 따라서 이를 해결하기 위해서는 half-close, 즉 한 방향의 스트림만을 종료시키는 과정이 필요하다. *Stream? 소켓을 통해 두 호스트가 연결되면 그 다음부터는 상호간의 데이터 송수신이 가능한 상태가 됨 -> 스트림이 형성된 상태 연결 종료 시에 위 그림처럼 생성된 입출력 스트림 중 하나만 연결을 끊는 것을 half-close라고 한다. Half-clo..
golang udp example chapter 6에서 upd 서버와 클라이언트 프로그램에 대해 공부했으니, 코드를 예시로 작성해봤다. 먼저 server.go package main import ( "fmt" "log" "net" ) func handleUDPConnection(conn *net.UDPConn) { buffer := make([]byte, 1024) // udp connection으로 부터 값을 읽어들인다. n, addr, err := conn.ReadFromUDP(buffer) if err != nil { log.Fatal(err) } // 리턴 값은 전달 받은 클라이언트 서버의 address, msg fmt.Println("UDP client : ", addr) fmt.Println("Received from UDP ..
tcp/ip - 06 / UDP tcp와는 다른 성격을 가진 전송계층 프로토콜인 udp 신뢰성을 보장하지 않는 대신 빠른 전송을 보장한다는 특징이 있다. 흐름제어를 하지 않기 때문에 빠른 전송이 가능하다. udp 소켓은 seq, ack 와 같은 메시지 전달을 하지 않고, 연결의 설정과 해제의 과정도 존재하지 않기 때문에 빠른 전송이 가능한 것이다. 데이터를 보내고 나서 확인 과정이 존재하지 않기 때문에 데이터의 분실, 혹은 손실 위험이 존재한다. 때문에 안정성 보다 성능이 중요시 될 때 udp를 사용한다. 블로그를 쓰다보니 티켓팅하는 서버들은 udp를 쓸거 같다는 생각이 드네.. udp 소켓은 연결의 개념이 존재하지 않기 때문에, 서버 - 클라이언트 소켓의 구분이 없다. -> 따라서 1:1 연결이 아니라 하나의 소켓으로 여러 소켓과 데..

728x90
반응형